`
dandy
  • 浏览: 65761 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

循环者的新娘

    博客分类:
  • java
阅读更多
请提供一个对i的声明,将下面的循环转变为一个无限循环:

while (i != i) {
}

这个循环可能比前一个还要使人感到困惑。不管在它前面作何种声明,它看起来确实应该立即终止。一个数字总是等于它自己,对吗?
对,但是IEEE 754浮点算术保留了一个特殊的值用来表示一个不是数字的数量[IEEE 754]。这个值就是NaN(“不是一个数字(Not a Number)”的缩写),对于所有没有良好的数字定义的浮点计算,例如0.0/0.0,其值都是它。规范中描述道,NaN不等于任何浮点数值,包括它自身在内[JLS 15.21.1]。因此,如果i在循环开始之前被初始化为NaN,那么终止条件测试(i != i)的计算结果就是true,循环就永远不会终止。很奇怪但却是事实。
你可以用任何计算结果为NaN的浮点算术表达式来初始化i,例如:
double i = 0.0 / 0.0;
同样,为了表达清晰,你可以使用标准类库提供的常量:
double i = Double.NaN;
NaN还有其他的惊人之处。任何浮点操作,只要它的一个或多个操作数为NaN,那么其结果为NaN。这条规则是非常合理的,但是它却具有奇怪的结果。例如,下面的程序将打印false:
class Test {
  public static void main(String[] args) {
  double i = 0.0 / 0.0;
  System.out.println(i - i == 0);
  }
}


这条计算NaN的规则所基于的原理是:一旦一个计算产生了NaN,它就被损坏了,没有任何更进一步的计算可以修复这样的损坏。NaN值意图使受损的计算继续执行下去,直到方便处理这种情况的地方为止。
总之,float和double类型都有一个特殊的NaN值,用来表示不是数字的数量。对于涉及NaN值的计算,其规则很简单也很明智,但是这些规则的结果可能是违背直觉的。
3
1
分享到:
评论
1 楼 kimmking 2009-02-13  
本质是三值或四值逻辑(TRUE、FALSE、NULL,unkown),

相关推荐

    SCBC循环_布雷顿循环_简单布雷顿循环布置

    一种简单超临界二氧化碳布雷顿循环matlab代码,计算循环效率功率和耗功输出功

    C/C++经典循环章节练习题循环

    C/C++经典循环章节,练习题循环

    Java 循环语句练习题.docx

    这个 Java 循环语句练习题文档旨在帮助初学者熟悉 Java 语言的循环语句,包括 for 循环、while 循环、do-while 循环等。通过练习题的解答,读者可以熟悉 Java 语言的基本语法和循环语句的使用方法。 一、for 循环...

    C语言循环习题循环循环循环循环

    C语言循环习题C语言循环习题C语言循环习题C语言循环习题C语言循环习题C语言循环习题C语言循环习题C语言循环习题C语言循环习题C语言循环习题C语言循环习题C语言循环习题C语言循环习题C语言循环习题C语言循环习题C语言...

    循环应力与循环应变的基本原理.pdf

    循环应力与循环应变的基本原理.pdf

    c语言之while循环PPT课件.pptx

    C语言 While 循环 PPT 课件 本资源是关于 C 语言 While 循环的 PPT 课件,总共 15 页,涵盖了 While 循环的基本概念、格式、应用和练习。 While 循环的基本概念 While 循环是一种控制结构,允许程序重复执行一...

    自然界中的氧循环和碳循环PPT学习教案.pptx

    在氧循环中,植物光合作用是氧气的主要来源,而动物的呼吸作用和物质燃烧是氧气的主要消耗者。氧循环的平衡对自然界中的生态系统至关重要,任何对氧循环的干扰都会对生态系统造成影响。 二、碳循环 碳循环是指碳...

    FME创建循环的模板

    通过FME2018创建循环的模板,包含单重循环和双重循环,博主在博客中详细讲解了循环的创建过程和细节,因此配合博文食用更佳。

    Robot Framework 教程 - 使用For循环

    Robot Framework 教程 - 使用For循环 在自动化测试过程中,使用For循环来对某个动作进行重复操作是很普遍的行为。在Robot Framework 中,各种测试库中均提供了多种方式的For循环结构,在其中覆盖了大部分类型的循环...

    Delphi 跳出循环的几种方法

    Delphi 跳出循环的几种方法Delphi 跳出循环的几种方法 我常用的几种方法 希望大家看看 那个是大家常用的而且比较不错的 以下是引用片段: Delphi中break,exit,abort跳出循环的比较 exit: 退出函数体 abort: ...

    labview 消费生产者循环318

    只有主vi,至于子vi就自己写吧,生产者/消费者结构采用了队列的数据存储方式。队列的数据存储是开辟一个缓存区,依据先进先出(First Input First Output,FIFO)的原则进行的

    kettle设置循环变量

    kettle设置循环变量,控制循环作业;kettle设置循环变量,控制循环作业.

    Unity无限循环列表demo

    Unity无限循环列表demo

    java for循环与增强for循环.docx

    Java 中的 for 循环和增强 for 循环 Java 中的 for 循环是一种基本的循环结构,用于遍历数组或集合中的元素。然而,Java 中还有一种特殊的循环结构,即增强 for 循环。增强 for 循环是 Java 5 中引入的一种循环结构...

    matlab实现循环谱

    matlab实现循环谱算法,可对具有循环平稳特点的数据进行筛选分析。

    MFC线程自定义消息循环

    MFC线程自定义消息循环

    易语言启动线程+循环+延时=时钟(循环)源码,易语言启动线程+循环+

    易语言启动线程中的延时循环源码,启动线程中的延时循环,子程序1

    多重For循环 优化

    多重For循环 优化

    c语言for循环PPT课件.pptx

    C语言for循环PPT课件总结 C语言for循环是一种常用的循环语句,用于实现循环操作。本PPT课件主要介绍了for循环的引入、基本格式、执行过程和特征,以及for循环语句的嵌套等内容。 一、 FOR 循环的引入 在之前的...

    循环队列的C++实现

    循环队列的C++实现,采用类写的,对数据结构学习者很有用哈

Global site tag (gtag.js) - Google Analytics