有没有办法保证浮点计算的跨平台回归测试结果?
例如,将相同的二进制值转换为十进制时,不同的实现可能会返回不同的结果,如下所述:http://code.google.com/p/mochiweb/issues/detail?id=59
我对Erlang / OTP案例感兴趣,但欢迎其他语言和环境中的示例。
答案 0 :(得分:2)
Erlang依赖于底层系统浮点实现。
浮点行为测试非常困难。可能最着名的平台浮点行为测试由William Kahan编写,称为paranoia
。
它移植到some languages,甚至移植到GPU的版本。
然而,这仅测试平台的基本浮点行为。
您所引用的是平台之间strtod
的各种C库行为。
这可能会通过C标准一致性测试软件进行测试。
但是测试并不能保证,所以你所要求的是无法实现的。浮点软件甚至CPU's
总会有微妙的错误或差异最好是验证计算结果并使用模块编写浮点测试。
答案 1 :(得分:0)
原则上,如果我们看一下C(在Erlang的引擎盖下使用),原始操作如multiplication,casting et.c.应该在各种环境中保持一致另一方面,标准库中的函数可能不会。
请注意,默认情况下,某些编译器(包括gcc)会稍微作弊,但会提供符合规则的命令行选项。