C#可以存储比双精度更精确的数据吗?

sim*_*005 9 c# precision double types

double在C#中,我的需求不够精确.我正在写一个分形程序,经过几次放大后,我的精度已经不够了.

我有一个数据类型可以保存比双精度更精确的浮点信息(即更多的小数位)?

dri*_*iis 17

是的,decimal就是为此而设计的.

但是,请注意小数类型的范围小于double.这是双倍可以保持更大的值,但它会失去精度.或者,如MSDN所述:

decimal关键字表示128位数据类型.与浮点类型相比,十进制类型具有更高的精度和更小的范围,这使其适用于财务和货币计算.十进制类型的近似范围和精度如下表所示.

之间的主要差别decimal并double是decimal被固定点和double是浮点.这意味着十进制存储精确值,而double表示由分数表示的值,并且不太精确.A decimal是128位,因此需要存储双倍空间.计算decimal也较慢(测量!).

如果你需要更高的精度,那么BigInteger可以在.NET 4中使用.(你需要自己处理小数点).在这里您应该知道,BigInteger是不可变的,因此对它的任何算术运算都将创建一个新实例 - 如果数字很大,这可能会导致性能下降.

我建议你仔细研究一下你需要多精确.也许你的算法可以使用规范化的值,可以更小?如果性能是一个问题,其中一个内置浮点类型可能会更快.


Dav*_*nde 5

.NET Framework 4 引入了 System.Numerics.BigInteger 结构,该结构可以保存具有任意大精度的数字。