当前位置: 首页 > 面试题库 >

为什么Double.NaN == Double.NaN返回false?

杨轶
2023-03-14
问题内容

我刚刚研究OCPJP问题,发现了这个奇怪的代码:

public static void main(String a[]) {
    System.out.println(Double.NaN==Double.NaN);
    System.out.println(Double.NaN!=Double.NaN);
}

运行代码时,我得到:

false
true

false当我们比较看起来彼此相同的两件事时,输出如何?什么NaN意思


问题答案:

溢出的操作将生成有符号无穷大,下溢的操作将生成非规范化的值或有符号的零,而数学上没有确定结果的操作将生成NaN。将NaN作为操作数的所有数值运算都会产生NaN。如前所述,NaN是无序的,因此涉及一个或两个NaN返回的数值比较操作false以及!=涉及NaN返回的任何比较true,包括x!=x何时x是NaN。



 类似资料:
  • 问题内容: 我刚刚遇到了in 的定义。它说: 我知道,根据Java规范这些文字代表了同一个号码:,,和。 同样对于其他常量,它们不使用’d’后缀: 他们为什么需要在NaN定义中将后缀d写入0.0的第一部分? 这是故意还是偶然? 问题答案: 根据Oak语言规范,浮点文字的格式为: 2.0d或2.0D double 2.0f或2.0F或2.0 float 但这在Java 1.0版中变成了熟悉的Java

  • 问题内容: 因此,我知道IEEE 754为不是实数的值指定了一些特殊的浮点值。在Java中,铸造这些值的原始不会 不 抛出异常像我本来期望。相反,我们有以下内容: 在这些情况下 不 抛出异常的理由是什么?这是IEEE标准,还是Java设计者的选择?我是否不知道有这样的强制转换是否可能导致异常后果? 问题答案: 在这些情况下不抛出异常的理由是什么? 我认为原因包括: 这些都是极端情况,在执行此类操作

  • 问题内容: 我正在使用a 检查我的哈希密码。我有PHP 5.5: 我上车了。我已经检查了posts的值和mysql user_password_hash返回。 我不知道为什么它返回假 有任何想法吗? 问题答案: 手册中的列长度可能是问题所在: 建议将结果存储在可扩展超过60个字符的数据库列中(255个字符是一个不错的选择)。 链接

  • 问题内容: 这是简单的代码,我没有得到设置位图的结果,而是得到了null。谁能告诉我我在哪里犯错了? 更新 好的,所以我无法像我想的那样将文本转换为图像。这样呢 这会创建位图吗? 问题答案: 从文档中: 返回 解码的位图;如果无法解码图像,则 返回 null。 字符串“ test”中涉及的字节不是有效的位图,对吗? 如果将文本“ test”保存在名为or 等的文件中,并试图在Windows中打开它

  • 问题内容: 为什么要用Python返回? 我如何获得改组后的值而不是? 问题答案: 更改列表 到位 。 在原位更改结构的Python API方法通常返回,而不是修改后的数据结构。 如果要基于现有列表创建 新的 随机混排列表,并按顺序保留现有列表,则可以使用输入的完整长度: 您还可以将with用于排序键: 但这会调用排序(O(NlogN)操作),而采样到输入长度仅需要O(N)操作(与所使用的过程相同

  • 问题内容: 我已经存储了在该数据库中插入并插入记录的过程。我想获取最后插入的记录的ID。返回NULL并返回正确的ID,为什么会发生?如我所读,因此最好在表上有一些触发器的情况下使用。我可以使用吗?不论触发器如何,它是否都在表的范围内返回ID? 那么问题是什么以及使用什么呢? 已编辑 问题答案: 就像奥德(Oded)所说的那样,问题在于您在执行之前要先询问身份。 作为解决方案,最好尽可能地接近运行。