double
不能满足我的需求。我正在写一个分形程序,经过几次放大后,我的精度已经不够了。
我有一种数据类型可以保存比双精度更精确的浮点信息(即更多小数位)吗?
答案 0 :(得分:17)
是的,decimal
就是为此而设计的。
但是,请注意小数类型的范围小于double。这是双倍可以保持更大的值,但它会失去精度。或者,如MSDN所述:
decimal关键字表示128位 数据类型。与浮点相比 类型,十进制类型有更大 精度和较小的范围,其中 使它适合金融和 货币计算。近似的 小数的范围和精度 类型如下表所示。
decimal
和double
之间的主要区别在于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)。