Разница между встроенным в 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 произвольной точности.

Другие вопросы по тегам