首页 > 解决方案 > 浮点数的八度精度:引擎盖下是 128 位吗?

问题描述

我正在使用 Koen Vos 在“Burg 方法的快速实现”中提出的方法制作 Burg 算法的 C# 版本。

我使用 GNU Octavearburg函数来比较结果。当我decimal在 C# 代码中使用内部变量时,测试结果几乎相同(精度为 0.0000000000001),但在我使用时double(精度为 0.01)则完全不同。

据我所知, GNU Octave 对 floats 使用 64 位精度,而不是 128 位。我错了吗?

/* Coefficients for comparision are taken from GNU Octave arburg() 
* t = [0:2000];
* x = sin( 2 * pi() * t / (512 / 5.2));
* output_precision(16)
* [a, v, k] = arburg(x(1:512), 4)
*/

C#代码超过300行,所以我认为最好不要放在这里。

我认为要么 GNU Octave 在后台使用 128 位精度,要么我的 C# 代码中有错误,并且提高计算精度以某种方式减轻了这个错误。

问题是 GNU Octave(或 Matlab)中的浮点数据可能是 128 位内部的吗?

标签: c#signal-processingoctave

解决方案


Octave 默认使用 64 位浮点数,没有办法强制它使用更高的精度。它只知道double(64 位浮点数)和single(32 位浮点数)。

英特尔(和兼容的)处理器可以使用 80 位浮点数(在 C 中是long double)进行计算,但它们不支持 128 位浮点数。某些软件可能会模拟 128 位浮点数以提高精度,但 Octave 不是其中之一(MATLAB 也不是)。


推荐阅读