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

问题描述 投票:0回答:3
C# 中的

double
无法满足我的需求。我正在编写一个分形程序,放大几次后我就失去了精度。

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

c# types double precision
3个回答
23
投票

是的,

decimal
就是为此而设计的。

但是,请注意十进制类型的范围小于双精度型。也就是说 double 可以容纳更大的值,但它会损失精度。或者,如 MSDN 上所述:

decimal关键字表示128位 数据类型。与浮点相比 类型,小数类型有更大的 精度和较小的范围,这 使其适合金融和 货币计算。近似值 小数的范围和精度 类型如下表所示。

decimal
double
之间的主要区别在于
decimal
是定点,
double
是浮点
。这意味着小数存储的是精确值,而
double
表示用分数表示的值,并且不太精确。 A
decimal
是 128 位,因此需要双倍的空间来存储。
decimal
的计算也较慢(测量!)。

如果您需要更大的精度,则可以从 .NET 4 开始使用

BigInteger
。(您需要自己处理小数点)。在这里您应该意识到,BigInteger 是不可变的,因此对其进行的任何算术运算都会创建一个新实例 - 如果数字很大,这可能会降低性能。

我建议你仔细研究一下你到底需要多精确。也许您的算法可以使用标准化值,该值可以更小?如果性能是一个问题,内置浮点类型之一可能会更快。


5
投票

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


0
投票

如果您需要比 Decimal 提供的精度更高的精度,请查看

BigInteger
(.NET 4)。

© www.soinside.com 2019 - 2024. All rights reserved.