为什么在Double.NaN = 0.0d / 0.0的定义中有一个"d"?

  • 本文关键字:定义 有一个 0d Double NaN java
  • 更新时间 :
  • 英文 :


i刚刚在 Double.class中遇到了 NaN的定义。它说:

 /**
   * A constant holding a Not-a-Number (NaN) value of type
   * {@code double}. It is equivalent to the value returned by
   * {@code Double.longBitsToDouble(0x7ff8000000000000L)}.
   */
  public static final double NaN = 0.0d / 0.0;

我知道,根据Java规范,这些文字表示相同的数字:0.00.0d0.0D

也适用于其他常数,他们没有使用" D"后缀:

public static final double POSITIVE_INFINITY = 1.0 / 0.0;
public static final double NEGATIVE_INFINITY = -1.0 / 0.0;

为什么他们需要在NAN定义中将后缀D写成0.0的第一部分?

这是故意的还是偶然的?

根据橡木语言规范,浮点文字的格式为:

  • 2.0D或2.0D Double
  • 2.0f或2.0f或2.0 float

但这更改为Java版本1.0

的熟悉的Java方式

如果浮点字体的字体为float类型,如果用ascii字母f或f后缀;否则,它的类型是双重的,并且可以选择用ASCII字母D或D。

更改也许是为了使其与类似C的语言一致,因为缺乏后缀意味着双重。

因此,d似乎是历史文物。尽管在Oak规格的链接版本("初步")中,有一个保证金说明NAN尚未实施。也许它是在稍后的版本中实现的,并且在此之后永远保持不变。

(标记Rotteveel的Props,以查找橡木语言规格)。

根据语言规范, 0.00.0d

相同

JLS第3.10.2节将其描述如下:

浮点字面的字面形式为浮点 ASCII字母f或f;否则它的类型是双重的,可以 可选地用ASCII字母D或D

将其装饰

制作字面数字浮点的方法之一是使用'。在数字中。

为什么不知道作者使用d后缀。但这通常是为了增加清晰度或减少读者理解此代码所需的努力。某些人可能知道这些规则,但对每个人都不知道。对于其他语言,默认值也可能有所不同。因此,在许多情况下,编写更多的详细版本更好。

另一个例子是括号:

 double a = b + c * d;

vs

 double a = b + (c * d);

我更喜欢括号的那个,因为它更容易阅读(即使所有程序员都知道他们是平等的)。

0.00.0d之间没有区别

仍然,该代码在许多语言中都可以读取, float是默认值,而在oak 中又是后来演变为Java ,因此看起来像历史问题。

- 安迪·特纳(Andy Turner)找到的链接。

相关内容

最新更新