Разница между встроенным в Python pow и math pow для больших целых чисел
Я считаю, что для больших целых чисел math.pow не может успешно преобразоваться в целочисленную версию. Я получил ошибочное умножение Карацубы при реализации с math.pow.
Например:
>>> a_Size=32
>>> pow(10,a_size) * 1024
102400000000000000000000000000000000
>>> math.pow(10,a_size) * 1024
1.024e+35
>>> int(math.pow(10,a_size) * 1024)
102400000000000005494950097298915328
Я пошел с 10 ** a_size с правильными результатами для больших целых чисел.
Для поплавков, посетите Разница между встроенным pow() и math.pow() для поплавков в Python?
Пожалуйста, объясните, почему это расхождение наблюдается для math.pow. Это наблюдается только от 10 степени 23 и выше.
1 ответ
math.pow()
всегда возвращает число с плавающей точкой, поэтому вы ограничены точностью float
(почти всегда число двойной точности IEEE 754). Встроенный pow()
с другой стороны, при вызове с целочисленными аргументами будет использоваться целочисленная арифметика Python произвольной точности.