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

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

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

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


person jj1bdx    schedule 10.03.2011    source источник


Ответы (2)


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

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

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

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

То, на что вы ссылаетесь, - это разнообразное поведение библиотеки C strtod между платформами. Это может быть проверено с помощью программного обеспечения для проверки соответствия стандарту C.

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

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

person Peer Stritzinger    schedule 10.03.2011

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

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

person Lindydancer    schedule 14.03.2011