Большинство диалектов Smalltalk в настоящее время реализуют наивный неточный плавающий модуль (fmod / remainder).
Я просто изменил это, чтобы улучшить Squeak / Pharo и, в конечном итоге, соблюдение стандартов Smalltalk (IEEE 754, ISO / IEC 10967), как я уже делал для других современных операций с плавающей запятой.
Однако для принятия этих изменений я ожидаю, что соблюдения стандартов будет недостаточно, чтобы убедить моих коллег, поэтому объяснение, при каких обстоятельствах эта точность действительно имела бы значение, мне очень помогло бы. Я не мог найти хороший пример сам до сих пор.
Кто-нибудь здесь знает, почему / когда / где (IOW в каком алгоритме) такая точность модуля будет иметь значение?
arithmetic
floating-point
aka.nice
источник
источник
Ответы:
Обратите внимание, что неточная реализация с плавающей точкой влияет на погоду.
Были тесты, выполняющие прогнозы погоды с одинаковыми входными данными на разных аппаратных средствах, и прогнозы расходились. Если вы используете итеративный алгоритм, то небольшая разница округления может привести к тому, что эффект бабочки превратит солнечный свет в дождь.
Правила округления в стандартах (IEEE 754, ISO / IEC 10967) были тщательно продуманы, поэтому численные алгоритмы ведут себя предсказуемо с большей точностью и воспроизводят один и тот же результат каждый раз. Несоблюдение стандартных численных алгоритмов, разработанных для этих правил округления, нарушится, и итерационные алгоритмы, такие как прогноз погоды, могут даже дать случайный результат.
(и разве это не говорит о прогнозах погоды? :)
источник