Форум сайта python.su
0
При делении больших чисел на 10, с последующим приведением к целому возникает вот такой вот глюк:
>>> a=555555555555555555555555555555555555555555555555555555555555555
>>> int(a/10)
55555555555555558769886663484831657077409927176391135454035968
>>> a=99999999999999999999
>>> int(a/10)
10000000000000000000
Заранее благодарен за обьяснение
Офлайн
75
“простых чисел”
а где простые числа ?
примеры у меня работают правильно
Офлайн
18
>>> 10/3 0: 3 >>> 10.0/3 1: 3.3333333333333335
Офлайн
221
sp3
речь вовсе не об этом
QAS
у меня как и у Singularity приведенный вами пример работает. Поэтому будьте так любезны, предоставьте базовую информацию для любого поста на этом форуме, а именно ти и версию ОС и Питона
Офлайн
14
JOHN_16, просто у товарища QAS стоит Python3. sp3 правильно указал на причину непонятки. Догадались, в чем было дело?
Офлайн
0
Версия ОС-WinXP SP3
Python 3.2
При повторных попытках тоже получается следующее:
>>> a=55555555555555555555555555555555555555555555/10
>>> a
5.5555555555555556e+42
>>> int(a)
5555555555555555632984509421896721739284480
>>>
Складывается впечатление, что при переводе из int во float после деления интерпретатор просто округляет получившееся число на определенном разряде, хотя разрядность числа для float вполне допустимая.
Изначальная задачка заключалась в записи цифр целого числа в список. С числами поменьше все получается правильно, а вот с порядками типа 10**42 уже вылазят проблемы.
PS: насчет ‘простых’ чисел я действительно погарячился
Офлайн
14
На минуточку, разрядность мантиссы у float — примерно 16 десятичных знаков.
Офлайн
221
Андрей Светлов
В отличиях поведения деления по умолчанию? (имеется ввиду a/b )
P.S. в python3 не силен ибо пока что не использую
Офлайн
14
ну да, 5555/10 в тройке даст float, для целочисленного деления следует применять 5555//10
Офлайн