История изменений
Исправление LamerOk, (текущая версия) :
если я правильно понял, он изначально говорил о float, чтобы считать процессором.
Это не существенно.
(0.1 + 0.2 - 0.3)
Обезьян пытается объяснить что в нормальном стандарте ответом был бы ноль.
а следовательно нет мотивов чистить мусор в младших разрядах при его превращении в десятичную строку.
Проблема в непонимании простейшей школьной математики, уже всё сказано раз два.
При преобразовании любой "обычной" по одному основанию дроби в дробь по другому основанию, будет вероятность получения бесконечной дроби. И тут "точность" расчётов (про которую тут распинается наш хвостатый друг) не имеет вообще никакого значения. Сколько бы битов ты не насыпал, в конечном итоге дробь придётся округлить на последнем знаке. Соответственно гарантировать, что расчёты в дробях по одному основанию дадут идентичные результаты после конвертации в дроби с другим основанием в принципе нельзя. Ни основания дробей, ни размерность чисел значения не имеют.
Именно это происходит с конвертацией десятичного 0.1
в дробь по основанию 2
.
После конвертации с округлением это уже никакой не мусор, а совершенно законное точное число, которое приближённо равно исходному числу, и дальнейшие операции с ним идут по обычным образом.
Наш хвостатый друг никак не может до этого допетрить и верует, что если битов будет очень много, то это поможет победить законы математики.
сам не смогу за пределами совсем простого «вынеси за скобки» как в том примере.
Вынос за скобки и прочие алгебраические преобразования вообще тут не при чём. Алгебраическими преобразованиями можно вообще много чего сделать, но это (пока) не задача арифмометра.
Исходная версия LamerOk, :
если я правильно понял, он изначально говорил о float, чтобы считать процессором.
Это не существенно.
(0.1 + 0.2 - 0.3)
Обезьян пытается объяснить что в нормальном стандарте ответом был бы ноль.
а следовательно нет мотивов чистить мусор в младших разрядах при его превращении в десятичную строку.
Проблема в непонимании простейшей школьной математики, уже всё сказано раз два.
При преобразовании любой "обычной" по одному основанию дроби в дробь по другому основанию, будет вероятность получения бесконечной дроби. И тут "точность" расчётов (про которую тут распинается наш хвостатый друг) не имеет вообще никакого значения. Сколько бы битов ты не насыпал, в конечном итоге дробь придётся округлить на последнем знаке. Соответственно гарантировать, что расчёты в дробях по одному основанию дадут идентичные результаты после конвертации в дроби с другим основанием в принципе нельзя. Ни основания дробей, ни размерность чисел значения не имеют.
Именно это происходит с конвертацией десятичного 0.1
в дробь по основанию 2
.
После конвертации с округлением это уже никакой не мусор, а совершенно законное точное число, которое приближённо равно исходному числу, и дальнейшие операции с ним идут по обычным образом.
Наш хвостатый друг никак не может до этого допетрить и верует, что если битов будет очень много, то это поможет победить законы математики.
сам не смогу за пределами совсем простого «вынеси за скобки» как в том примере.
Вынос за скобки и прочие алгебраические преобразования вообще тут не при чём.