浮点数的八度精度:引擎盖下是 128 位吗?

Octave precision for floats: Is it 128 bit under the hood?

我正在使用 Koen Vos 在 "A Fast Implementation of Burg’s Method" 中提出的方法制作 Burg 算法的 C# 版本。

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

据我所知 GNU Octave uses 64-bit precision for floats,不是 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 位的吗?

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

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