为什么System.Numerics.Complex使用双精度而不是小数?

时间:2014-08-28 04:41:24

标签: c#-4.0 floating-point

我最近一直在与System.Numerics.Complex合作,我开始注意到典型的浮点“漂移”,其中存储的值计算得到十分之一的百万分之一或类似的东西,这是众所周知且与float类型甚至double类型相同。我查看了Complex结构,当然,它使用了double个变量。为什么它使用double值来存储其数据而不是decimal值,这些值旨在防止这种情况发生?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

回答你的问题:

  1. double的速度提高了几个数量级,因为操作是在硬件级别完成的。
  2. base-2 float对于大型计算实际上可以更多准确,因为有更少的"摆动"当向上和向下移位指数时:1位精度小于1位十进制数。此外,base-2可以使用隐式前导位,这意味着它们可以表示比其他基数更多的数字。
  3. 复数通常用于科学/工程应用,其中大约10 -16 的小相对误差被其他误差源(例如由于测量或模型)所抵消。
  4. 另一方面,
  5. 小数通常用于"会计"类型操作,其中舍入误差通常可以忽略不计(即添加小数,乘以整数等)。