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

时间:2011-03-29 13:19:01

标签: c# types double precision

C#中的{p> double不能满足我的需求。我正在写一个分形程序,经过几次放大后,我的精度已经不够了。

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

3 个答案:

答案 0 :(得分:17)

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

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

  

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

decimaldouble之间的主要区别在于decimal is fixed-point and double is floating point。这意味着十进制存储精确值,而double表示由分数表示的值,并且不太精确。 decimal是128位,因此需要存储双倍空间。 decimal上的计算也较慢(测量!)。

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:0)

如果您需要比Decimal更精确的精确度,请查看BigInteger(.NET 4)。