Да, это ошибка.Тот факт, что у него есть техническое объяснение (которое вряд ли приемлемо для непрофессионала), не освобождает его от ошибки.Если это не ошибка, то вы либо утверждаете, что - как мы все иногда делаем - «это особенность», либо что это ограничение системы.
Чтобы устранить ее, я бы предложил вам обойтикаждый результат до приемлемого уровня точности, чтобы удалить очень маленькую ошибку.Как показывают другие ответы, проблема в том, что в вашем калькуляторе квадратный корень из «4» - это не «2», а число, очень близкое к 2. Чтобы разрешить этот раунд, получим 10, 20, 30 десятичных знаков иливсе, что вы можете себе позволить.
Я бы сказал, что любой механизм калькулятора должен иметь базовый уровень точности, превышающий доступный уровень точности с достаточно большим запасом, чтобы пользователь не мог получить доступ к пределамарифметика с плавающей точкой.Если вы выберете этот путь, вы потеряете одну форму «точности», но просто заявите, что ваш калькулятор имеет точность до n десятичных знаков.Это более чем приемлемо, особенно если это решит эту проблему.
Однако это не так уж важно, не так ли?
Как-то так, я однажды работал над финансовым приложением,Вендор предоставил некоторое программное обеспечение, которое должно было рассчитать некоторые сложные процентные ставки.Их расчеты всегда были выключены.Они утверждали, что это было «из-за арифметики с плавающей точкой» и пытались обучить меня этому вопросу;но их алгоритм был далеко.При составлении процентных ставок для сумм в долларах мы всегда округляем итоговую сумму после каждой итерации (день, неделя, месяц, год или что-либо еще).В зависимости от ситуации он может округляться до ближайшего доллара, ближайшего цента или ближайшей сотой доли цента, но это количественно, и мы никогда не составляем миллионные доли процента из года в год.Это подход, который вам следует использовать, если вы хотите избежать ошибки округления вычислений.