LINUX.ORG.RU

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

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

если я правильно понял, он изначально говорил о float, чтобы считать процессором.

Это не существенно.

(0.1 + 0.2 - 0.3)
Обезьян пытается объяснить что в нормальном стандарте ответом был бы ноль.

а следовательно нет мотивов чистить мусор в младших разрядах при его превращении в десятичную строку.

Проблема в непонимании простейшей школьной математики, уже всё сказано раз два.

При преобразовании любой "обычной" по одному основанию дроби в дробь по другому основанию, будет вероятность получения бесконечной дроби. И тут "точность" расчётов (про которую тут распинается наш хвостатый друг) не имеет вообще никакого значения. Сколько бы битов ты не насыпал, в конечном итоге дробь придётся округлить на последнем знаке. Соответственно гарантировать, что расчёты в дробях по одному основанию дадут идентичные результаты после конвертации в дроби с другим основанием в принципе нельзя. Ни основания дробей, ни размерность чисел значения не имеют.

Именно это происходит с конвертацией десятичного 0.1 в дробь по основанию 2.

После конвертации с округлением это уже никакой не мусор, а совершенно законное точное число, которое приближённо равно исходному числу, и дальнейшие операции с ним идут по обычным образом.

Наш хвостатый друг никак не может до этого допетрить и верует, что если битов будет очень много, то это поможет победить законы математики.

сам не смогу за пределами совсем простого «вынеси за скобки» как в том примере.

Вынос за скобки и прочие алгебраические преобразования вообще тут не при чём. Алгебраическими преобразованиями можно вообще много чего сделать, но это (пока) не задача арифмометра.

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

если я правильно понял, он изначально говорил о float, чтобы считать процессором.

Это не существенно.

(0.1 + 0.2 - 0.3)
Обезьян пытается объяснить что в нормальном стандарте ответом был бы ноль.

а следовательно нет мотивов чистить мусор в младших разрядах при его превращении в десятичную строку.

Проблема в непонимании простейшей школьной математики, уже всё сказано раз два.

При преобразовании любой "обычной" по одному основанию дроби в дробь по другому основанию, будет вероятность получения бесконечной дроби. И тут "точность" расчётов (про которую тут распинается наш хвостатый друг) не имеет вообще никакого значения. Сколько бы битов ты не насыпал, в конечном итоге дробь придётся округлить на последнем знаке. Соответственно гарантировать, что расчёты в дробях по одному основанию дадут идентичные результаты после конвертации в дроби с другим основанием в принципе нельзя. Ни основания дробей, ни размерность чисел значения не имеют.

Именно это происходит с конвертацией десятичного 0.1 в дробь по основанию 2.

После конвертации с округлением это уже никакой не мусор, а совершенно законное точное число, которое приближённо равно исходному числу, и дальнейшие операции с ним идут по обычным образом.

Наш хвостатый друг никак не может до этого допетрить и верует, что если битов будет очень много, то это поможет победить законы математики.

сам не смогу за пределами совсем простого «вынеси за скобки» как в том примере.

Вынос за скобки и прочие алгебраические преобразования вообще тут не при чём.