Точность обработки Python - PullRequest
0 голосов
/ 28 января 2019

Мне просто интересно, почему эти 2 отпечатка не имеют одинакового вывода.Я хочу рассчитать Eulers Totient Func.В будущем было бы здорово, если бы кто-нибудь мог сказать мне, как python обрабатывает большие числа (более 60 цифр) и как с ними работать.

Спасибо

import math
a = (math.pow(19,6)-math.pow(19,5))
b = (math.pow(53,4)-math.pow(53,3))
c = (36)
d = (math.pow(101,3)-math.pow(101,2))
print(a)
print(b)
print(c)
print(d)
y= int(a)*int(d)*int(c)*int(b)
print(int(y))
print(int(a*b*c*d))

Вывод:

44569782.0
7741604.0
36
1020100.0
12671169797620641340800
12671169797620641038336

1 Ответ

0 голосов
/ 28 января 2019

Я предполагаю, что это связано с ошибкой с плавающей запятой на больших числах.Используйте встроенный оператор pow или ** вместо math.pow для целых чисел.Поскольку pow и ** возвращают целые числа, явное приведение к целым числам не требуется.Кроме того, скобки вокруг переменных не нужны и уменьшают читабельность:

a = 19 ** 6 - 19 ** 5
b = 53 ** 4 - 53 ** 3
c = 36
d = 101 ** 3 - 101 ** 2
print(a)
print(b)
print(c)
print(d)
y = a * b * c * d
print(y)
print(int(a * b * c * d))

44569782
7741604
36
1020100
12671169797620641340800
12671169797620641340800
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...