LINUX.ORG.RU

История изменений

Исправление dva20, (текущая версия) :

короче когда точность теряется, такие вот цепочки вычислений надо делать как можно короче

Да, но мне казалось, что 0,56 (короткое же?) можно легко преобразовать в 5,6 умножением на 10. Но оказалось без округления это невозможно, так как когда я ввожу 0,56 «ручками», где-то глубоко в системе оно записалось как 0,559999999999985.

А в итоге вон что оказалось:

>>> a = 0.56
>>> a
0.56
>>> a == 0.56
True
>>> a * 10 / 10
0.56
>>> a * 10
5.6000000000000005
>>>

Умножение и деление возвращает число в изначально введённое, а если просто умножение, то уже идёт «искажение» исходного числа.

Так тут, в Пайтоне число становится 5.6000000000000005, а в C++ совсем другое, меньше 5,6.

Исправление dva20, :

короче когда точность теряется, такие вот цепочки вычислений надо делать как можно короче

Да, но мне казалось, что 0,56 (короткое же?) можно легко преобразовать в 5,6 умножением на 10. Но оказалось без округления это невозможно, так как когда я ввожу 0,56 «ручками», где-то глубоко в системе оно записалось как 0,559999999999985.

А в итоге вон что оказалось:

>>> a = 0.56
>>> a
0.56
>>> a == 0.56
True
>>> a * 10 / 10
0.56
>>> a * 10
5.6000000000000005
>>>

Умножение и деление возвращает число в изначально введённое, а если просто умножение, то уже идёт «искажение» исходного числа

Исходная версия dva20, :

короче когда точность теряется, такие вот цепочки вычислений надо делать как можно короче

Да, но мне казалось, что 0,56 (короткое же?) можно легко преобразовать в 5,6 умножением на 10. Но оказалось без округления это невозможно, так как когда я ввожу 0,56 «ручками», где-то глубоко в системе оно записалось как 0,559999999999985.

А в итоге во чё оказалось

>>> a = 0.56
>>> a
0.56
>>> a == 0.56
True
>>> a * 10 / 10
0.56
>>> a * 10
5.6000000000000005
>>>

Умножение и деление возвращает число в изначально введённое, а если просто умножение, то уже идёт «искажение» исходного числа