gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:18:27 30 4
gpt4 key购买 nike

我刚刚在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 定义的 0.0 的第一部分写后缀 d?

这是故意的还是偶然的?

最佳答案

根据Oak language spec ,浮点字面量的格式为:

  • 2.0d or 2.0D double
  • 2.0f or 2.0F or 2.0 float

但这已被 Java version 1.0 更改为熟悉的 Java 方式

A floating-point literal is of type float if it is suffixed with an ASCII letter F or f; otherwise its type is double and it can optionally be suffixed with an ASCII letter D or d.

进行更改可能是为了使其与 C-like languages 保持一致。 , 缺少后缀意味着双倍。

所以d似乎是一个历史遗迹;虽然,在 Oak 规范的链接版本(这是“初步的”)中,有一个边注说 NaN 尚未实现。也许它是在稍晚一点的版本中实现的,并且此后一直保持不变。

(对 Mark Rotteveel 的支持,用于插入查找 Oak 语言规范)。

关于java - 为什么Double.NaN = 0.0d/0.0的定义中有一个 "d"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41283474/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com