Java中的双精度字面量应该使用多少个有效数字?

3

在Java中定义double字面量时应该使用多少位有效数字?这是假设我试图表示一个比double所能容纳的更多有效数字的数字。

Math.java中我看到了20和21:

public static final double E = 2.7182818284590452354;
public static final double PI = 3.14159265358979323846;

这比IEEE 754提供的15-17个有效数字更多。那么什么是一般的经验法则呢?


4
首先,我会确定手头问题需要多少位数,然后根据这个确定数据类型(也许值得切换到BigDecimal)。 - SJuan76
我不是这方面的专家,但如果你从最接近的十六进制数中取出13个十六进制数字,并将其转换为精确的十进制值,我不会感到惊讶,最终可能会得到20-21个十进制数字。 - Teepeemm
请参见https://dev59.com/d2Yr5IYBdhLWcg3wmLVk。 - sourcenouveau
2个回答

4

双精度有15-17位小数的精度。

我无法回答为什么这些常量会出现20个小数,但您会发现这些数字会被截断:

2.7182818284590452354d == 2.718281828459045d


1
如果您阅读Math.E和Math.PI的javadocs,您会看到以下内容(重点是我的):
“最接近任何其他值的double值[...]”
如果您的字面量可以准确地表示为double,请这样做。否则,找到可表示的最接近值。
当然,根据您的值的使用方式,如果您只精确到10个有效数字,可能并不重要。

我认为这个问题是在询问当一个字面量无法被精确表示为双精度时的情况。因此,问题是可以指定多少个有效数字。 - jzd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接