Есть ли способ гарантировать результаты кросс-платформенных регрессионных тестов для вычисления с плавающей запятой? - PullRequest
2 голосов
/ 10 марта 2011

Есть ли способ гарантировать результаты кросс-платформенных регрессионных тестов для вычисления с плавающей запятой?

Например, разные реализации могут возвращать разные результаты при преобразовании одного и того же двоичного значения в десятичное, как описано в: http://code.google.com/p/mochiweb/issues/detail?id=59

Меня интересуют случаи с Erlang / OTP, но приветствуются примеры на других языках и в других средах.

Ответы [ 2 ]

2 голосов
/ 10 марта 2011

Erlang опирается на базовую реализацию систем с плавающей запятой.

Тестирование поведения с плавающей точкой довольно сложно. Вероятно, самый известный тест поведения платформы с плавающей запятой был написан Уильямом Каханом и называется paranoia.

Он был портирован на некоторые языки и даже версию для GPU .

Однако это только тестирование базового поведения платформ с плавающей запятой.

На что вы ссылаетесь, это разное поведение библиотеки C strtod на разных платформах. Это может быть проверено стандартным программным обеспечением для тестирования соответствия С.

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

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

0 голосов
/ 14 марта 2011

В принципе, если мы посмотрим на C (который используется под капотом для Erlang), примитивные операции, такие как умножение, приведение и т. Д.должно быть согласованным в разных средах.С другой стороны, функции из стандартной библиотеки могут не выполняться.

Обратите внимание, что некоторые компиляторы, включая gcc, по умолчанию немного обманывают, но предоставляют параметр командной строки для соответствия правилам.

...