c# - 浮点数的八度精度:引擎盖下是 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 位内部的吗?
解决方案
Octave 默认使用 64 位浮点数,没有办法强制它使用更高的精度。它只知道double
(64 位浮点数)和single
(32 位浮点数)。
英特尔(和兼容的)处理器可以使用 80 位浮点数(在 C 中是long double
)进行计算,但它们不支持 128 位浮点数。某些软件可能会模拟 128 位浮点数以提高精度,但 Octave 不是其中之一(MATLAB 也不是)。
推荐阅读
- sql - SQL 使用值列表更新一列的所有行
- batch-file - Helm 和 Kustomize - Windows 的后渲染器 shell 脚本
- html - 发送链接时如何将嵌入内容添加到我的网站?
- git - 关于一次对 github 存储库进行多项更改的问题
- elasticsearch - 弹性搜索:更新索引或执行两个请求
- python - 使用图像上的点之间的已知距离及其透视图确定视野(OpenCV python)
- python - python套接字未连接到Web服务器
- c# - 在 HTTP 上实现监听器的正确方法
- r - 绘图轴超出边界
- javascript - React-native-gifted-chat 与 Cloud Firestore 分页