我正在探索连接C和R(使用R的.Call来提高速度)。我只使用C进行平凡的整数计算和文本处理应用程序,我从来不必担心浮点变量,下溢等问题。我可以为函数编写哪些测试来确保数值精度?
答案 0 :(得分:3)
有关可能的边缘情况的详细概述,请参阅此Wikipedia article。
然后,对于单元测试,请参阅The pitfalls of verifying floating-point computations。
答案 1 :(得分:2)
要正确执行此类测试,您必须对代码中的所有浮点计算进行错误分析。为什么这很重要的典型例子包括寻找二次方程根的简单事物到解决疯狂递归关系(例如搜索“穆勒重现”)。
但是,进行此错误分析通常是非常重要且耗时的,而且通常是不可能的。在这种情况下,第二种最佳情况是拥有大量输入和正确的输出值,并在测试中使用它们。但这主要是一个鸡和蛋的问题,因为如何你找到了一些甚至稍微复杂的东西的正确值,除非在某种计算机上实际计算它们?
所以,实际的解决方案包括:
fesetround()
和fegetround()
。我们的想法是,如果您的浮点计算稳定且准确,则不同的舍入模式应该会产生类似的输出。如果不同的舍入模式导致数字太不相同,则表示存在错误。遗憾的是,这种方法无法告诉您 错误,但这是第一步。此外,这个方法应该很快,除了你要为一个输入集运行代码四次这样的事实。答案 2 :(得分:0)
我想: