Я обнаружил, что для больших целых чисел 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 и выше.
pow(float(10), 32) * 1024 -> 1.024e+35
, ответ находится в вопросе, с которым вы связались, math.pow () неявно преобразует свои аргументы в float: - person Padraic Cunningham   schedule 10.10.2016help(math)
Он обеспечивает доступ к математическим функциям, определенным стандартом C. - person Nizam Mohamed   schedule 10.10.2016