在Java中定义double
文字时,我应该使用多少个有效数字?这是假设我试图用比双精度可以容纳的更有效的数字来表示一个数字。
在Math.java
我看到 20 和 21:
public static final double E = 2.7182818284590452354;
public static final double PI = 3.14159265358979323846;
这超过了 IEEE 754 提供的 15-17 位有效数字。那么一般的经验法则是什么?
双精度具有 15-17 个十进制数字的精度。
我无法回答为什么这些常量以 20 位小数出现,但您会发现这些数字被删除了:
2.7182818284590452354d == 2.718281828459045d
如果你阅读了 Math.E 和 Math.PI 的 javadocs,你会看到这个(强调我的):
比任何其他值都近的双倍值 [...]
如果你的文字可以精确地表示为双精度,那就这样做吧。否则,请查找可表示的最接近的值。
当然,根据你的值的使用方式,如果你"只"精确到,比如说,10个有效数字,这可能并不重要。