Matlab`corr`在同一数据集上给出不同的结果。浮点计算是否确定?

时间:2014-05-06 18:27:15

标签: matlab floating-point

我正在使用Matlab的corr函数来计算数据集的相关性。虽然结果在双点精度(< 10 ^ -14)内是一致的,但即使在同一台计算机上,它们也不完全相同。

浮点计算是否确定?随机性的来源在哪里?

1 个答案:

答案 0 :(得分:0)

是和否。

浮点算术,如操作序列+*等,是确定性的。然而,在这种情况下,最有可能使用线性代数库(BLAS,LAPACK等),这可能不是:例如,矩阵乘法通常不会像某些参考文献那样被称为“三重循环”,但是相反,矩阵被拆分为块,这些块根据缓存大小等内容进行了优化,以实现最佳性能。因此,您将获得不同的操作序列,具有不同的中间舍入,这将产生略微不同的结果。但是,通常情况下,这些结果的变化小于您产生的总舍入误差。

我不得不承认,我有点惊讶你在同一台计算机上得到不同的结果,但很难知道为什么不知道图书馆在做什么(IIRC,Matlab使用英特尔BLAS库,所以你可以查看他们的文档。)