9

在我的项目中,我必须计算double元素矩阵的除法、乘法、减法、加法。问题是当矩阵的大小增加时,我的输出的准确性会受到极大的影响。目前我正在使用double我认为使用内存的每个元素,并且无论小数点位置如何,8 bytes它的准确性都是如此。16 digits即使对于大尺寸的矩阵,所有元素占用的内存也在几千字节的范围内。所以我可以负担得起datatypes需要更多内存的使用。所以我想知道哪种数据类型比double. 我尝试在一些书籍中搜索并且我可以找到long double。但我不知道它的精度是多少。如果我想要比这更精确怎么办?

4

4 回答 4

10

根据 Wikipedia,80 位“英特尔”IEEE 754扩展精度 long double,即 80 位填充到内存中的 16 个字节,具有 64 位尾数,没有隐式位,可以得到 19.26 个十进制数字。多年来,这几乎是普遍的标准long double,但最近情况开始发生变化。

较新的 128 位四精度格式具有 112 个尾数位和一个隐式位,它可以得到 34 个十进制数字。GCC 将此作为__float128类型实现,并且(如果有记忆的话)有一个编译器选项可以设置long double它。

于 2013-03-27T13:28:04.257 回答
7

您可能需要考虑操作的顺序,即首先从最小值开始按有序顺序进行加法。这将使用尾数中的相同精度提高结果的整体准确性:

1e00 + 1e-16 + ... + 1e-16 (1e16 times) = 1e00
1e-16 + ... + 1e-16 (1e16 times) + 1e00 = 2e00

关键是把小数加到大数上会使它们消失。所以后一种方法减少了数值误差

于 2013-03-27T15:10:22.670 回答
3

精度更高的浮点数据类型double将取决于您的编译器和体系结构。

为了获得更多的double精度,您可能需要依赖一些支持任意精度计算的数学库。不过,这些可能不会很快。

于 2013-03-27T13:16:58.907 回答
0

在 Intel 架构上,精度long double80 位

你想代表什么样的价值观?也许你最好使用固定精度。

于 2013-03-27T13:21:38.723 回答