我已经给出了数百万个小数点后精确到 4 位的数字。
必须以复杂的方式(在优化问题中)对它们进行大量添加和减去。之后(以及介于两者之间)我必须确定确切的值。
在 C# 中,我想到了三种不同的可能性:
- 使用双精度并定义舍入误差进行比较。
- 使用小数类型
- 创建一个使用整数算术的类型
你有什么建议?
绝对不要用double
。它不代表您所获得的信息。
我个人会从使用decimal
. 对于您所获得的信息,这是最合适的类型,您可以依赖结果。
如果这证明太慢,您可以将所有值转换为整数,执行所有算术运算,然后再转换回来 - 但我只会在您看到版本的执行情况后才会这样做。decimal
double
仅提供小数部分的近似表示(例如,十进制中没有精确的二进制表示 0.2)。decimal
type 可以在整个算术中产生一个精确的值,但decimal
可以比任何 base2 类型慢一个顺序,例如 float 和 double,如果不是更多的话。
也许您可以在算术之前将所有数字缩放到 10,000 的顺序并对整数进行运算,然后再将基数放回去;检查十进制它是如何执行的。