我试图对C和Matlab中编写的算法进行等价测试.
该算法在时间上包含某种循环,运行时间超过1000次.它具有算术运算和一些数学函数.
我手动将初始输入提供给两个平台(如a = 1.767,b = 6.65,…),当我检查这些输入的十六进制表示时,它们是相同的.所以没有输入的问题.并通过一个16位十进制数字的文本文件获取c到matlab的输出. (我使用“setprecision(32)”语句)
但这里有问题;虽然在这两个代码的第614步之后,所有的结果是完全一样的,在615的步骤我得到了2.xxx..xxe-19的区别?在这一步之后,错误变得越来越大,在运行结束时它是大约5.xx..xxe-14.
0x3ff1 3e42 a211 6cca —> [C函数] —> 0x3ff4 7619 7005 5a42
0x3ff1 3e42 a211 6cca —> [MATLAB函数] —> ans
ans – 0x3ff4 7619 7005 5a42
= 2.xxx..xxe-19
我搜索了matlab的行为方式,发现了非常有趣的东西,如“非规范尾数”.虽然realmin是关于e-308,通过对尾数进行非规范化matlab具有关于e-324的最小实数.进一步的matlab对于“pi”或“exp(1)”的数字比c更多.
另一方面,matlab帮助说,无论显示的格式如何,matlab在内部使用双精度.
所以,如果有人解释这些差异的确切原因,我真的很感激我们如何在matlab和c上进行等价测试?