有没有办法保证浮点计算的跨平台回归测试结果?

时间:2011-03-10 11:53:33

标签: erlang floating-point ieee-754

有没有办法保证浮点计算的跨平台回归测试结果?

例如,将相同的二进制值转换为十进制时,不同的实现可能会返回不同的结果,如下所述:http://code.google.com/p/mochiweb/issues/detail?id=59

我对Erlang / OTP案例感兴趣,但欢迎其他语言和环境中的示例。

2 个答案:

答案 0 :(得分:2)

Erlang依赖于底层系统浮点实现。

浮点行为测试非常困难。可能最着名的平台浮点行为测试由William Kahan编写,称为paranoia

它移植到some languages,甚至移植到GPU的版本。

然而,这仅测试平台的基本浮点行为。

您所引用的是平台之间strtod的各种C库行为。 这可能会通过C标准一致性测试软件进行测试。

但是测试并不能保证,所以你所要求的是无法实现的。浮点软件甚至CPU's

总会有微妙的错误或差异

最好是验证计算结果并使用模块编写浮点测试。

答案 1 :(得分:0)

原则上,如果我们看一下C(在Erlang的引擎盖下使用),原始操作如multiplication,casting et.c.应该在各种环境中保持一致另一方面,标准库中的函数可能不会。

请注意,默认情况下,某些编译器(包括gcc)会稍微作弊,但会提供符合规则的命令行选项。