2015-12-20 7 views
0

я нашел что-то действительно странное происходит в питона с этим кодом:Python вычисления ошибки

num = 99999999999999999999999999999 

for i in range(2, num): 
    if num % i == 0: 
     j = int(num/i) 
     print(num, '=', i, '*', j) 
     break 
else: 
    print(num, 'is prime') 

Python дает мне

99999999999999999999999999999 = 3 * 33333333333333333409747959808 

в качестве вывода, что obviouly неправильно. И как больше num становится, чем выше выход.

Может кто-нибудь сказать мне, что здесь происходит?

ответ

1

Я ожидаю, что вы используете Python 3. В Python 3, деля целые числа с оператором /, он преобразует их в float и производит результат поплавка. Поплавки имеют ограниченную точность, поэтому вы видите ошибки округления.

Чтобы получить целочисленное деление без ошибок округления, вы можете использовать оператор //, который дает истинное целочисленное деление. Просто измените назначение на j на:

j = num // i 
Смежные вопросы