2

我已经给出了数百万个小数点后精确到 4 位的数字。

必须以复杂的方式(在优化问题中)对它们进行大量添加和减去。之后(以及介于两者之间)我必须确定确切的值。

在 C# 中,我想到了三种不同的可能性:

  1. 使用双精度并定义舍入误差进行比较。
  2. 使用小数类型
  3. 创建一个使用整数算术的类型

你有什么建议?

4

2 回答 2

6

绝对不要用double。它不代表您所获得的信息。

我个人会从使用decimal. 对于您所获得的信息,这是最合适的类型,您可以依赖结果。

如果这证明太慢,您可以将所有值转换为整数,执行所有算术运算,然后再转换回来 - 但我只会在您看到版本的执行情况后才会这样做。decimal

于 2012-12-29T10:00:42.080 回答
3

double仅提供小数部分的近似表示(例如,十进制中没有精确的二进制表示 0.2)。decimaltype 可以在整个算术中产生一个精确的值,但decimal可以比任何 base2 类型慢一个顺序,例如 float 和 double,如果不是更多的话。

也许您可以在算术之前将所有数字缩放到 10,000 的顺序并对整数进行运算,然后再将基数放回去;检查十进制它是如何执行的。

于 2012-12-29T10:33:29.487 回答