【发布时间】:2020-01-14 17:31:24
【问题描述】:
我正在使用 Koen Vos 在“Burg 方法的快速实现”中提出的方法制作 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 或任何其他工具等软件实现获得的结果更可靠。
标签: c# signal-processing octave