有没有办法保证浮点计算的跨平台回归测试的结果?
Posted
技术标签:
【中文标题】有没有办法保证浮点计算的跨平台回归测试的结果?【英文标题】:Is there any way to guarantee the results of cross-platform regression tests for the floating point calculation? 【发布时间】:2011-03-10 11:53:32 【问题描述】:
例如,不同的实现在将相同的二进制值转换为十进制时可能会返回不同的结果,如:http://code.google.com/p/mochiweb/issues/detail?id=59
我对 Erlang/OTP 案例感兴趣,但欢迎其他语言和环境的示例。
【问题讨论】:
【参考方案1】:Erlang 依赖于底层系统的浮点实现。
浮点行为测试非常困难。可能最著名的平台浮点行为测试是由William Kahan 编写的,称为paranoia
。
它被移植到some languages 甚至是GPU 的版本。
但这只是测试平台的基本浮点行为。
您所引用的是平台之间 strtod
的各种 C 库行为。
这可以通过 C 标准一致性测试软件进行测试。
但测试并不能保证,因此您所要求的无法实现。浮点软件甚至CPU's 总是会有细微的错误或差异
最好是验证计算结果并使用模块编写浮点测试。
【讨论】:
【参考方案2】:原则上,如果我们看一下 C(它在 Erlang 的底层使用),像乘法、强制转换等基本操作。跨环境应该是一致的。另一方面,标准库中的函数可能不会。
请注意,一些编译器,包括 gcc,默认情况下会作弊,但提供了一个命令行选项来遵守规则。
【讨论】:
以上是关于有没有办法保证浮点计算的跨平台回归测试的结果?的主要内容,如果未能解决你的问题,请参考以下文章
用SPSS进行非线性回归分析,结果却总显示迭代0次就达到最优解,初始值就是模拟结果,请教高手不知为何?