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

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

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

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

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

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

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

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

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

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

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