Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 双d=1/0.0 vs双d=1/0_Java_Double_Infinity - Fatal编程技术网

Java 双d=1/0.0 vs双d=1/0

Java 双d=1/0.0 vs双d=1/0,java,double,infinity,Java,Double,Infinity,它打印无穷大,但是如果我们写双d=1/0并打印它,我们将得到此异常:异常 线程“main”中的java.lang.arithmetricException:/by零 在D.main(D.java:3)为什么java知道在一种情况下,按零下潜是无限的,但对于int 0它没有定义? 在这两种情况下,d都是双倍的,并且在这两种情况下,结果都是无穷大 浮点数据类型保留了一个特殊值来表示无穷大,而整数值则没有 在您的代码中,1/0是一个整数除法,当然会失败。但是,1/0.0是一个浮点除法,因此导致无穷大严

它打印无穷大,但是如果我们写双d=1/0并打印它,我们将得到此异常:
异常
线程“main”中的java.lang.arithmetricException:/by零
在D.main(D.java:3)
为什么java知道在一种情况下,按零下潜是无限的,但对于int 0它没有定义?
在这两种情况下,d都是双倍的,并且在这两种情况下,结果都是无穷大

浮点数据类型保留了一个特殊值来表示无穷大,而整数值则没有


在您的代码中,1/0是一个整数除法,当然会失败。但是,
1/0.0
是一个浮点除法,因此导致
无穷大
严格来说,
1.0/0.0
根本不是无穷大,它是未定义的

正如David在他的回答中所说,浮动有一种表达数字的方式,它不在它所能代表的最高数字和最低数字的范围内。这些值统称为“非数字”或“NaN”。NAN也可能发生在真正无限的计算中(例如
limx->0 ln2 x
),有限但超出浮动范围的值可以表示(例如10100100),以及未定义的值,例如1/0

浮点数不能很清楚地区分未定义的值、溢出和无穷大;由该计算得出的比特组合取决于。因为对于不知道浮点值是如何表示的人来说,只打印“NaN”或“不是数字”有点难理解,所以格式化程序只打印“无穷大”或“有时”-无穷大”,因为当您知道FP NaN的全部内容时,它提供了相同级别的信息,而当您不知道FP NaN的全部内容时,它具有一定的意义

整数没有任何可与浮点NaN相媲美的东西。由于在执行1/0操作时整数没有合理的值,因此剩下的唯一选项是引发异常


用机器语言编写的相同代码可以调用一个中断(类似于Java异常),或者设置一个条件寄存器(它将是一个全局值),以指示最后一次计算是一次除以零的运算。哪些是可用的,平台会有所不同

一旦显式转换后,
double d=1/0
double d=(double)(1/0)
相同,而
double d=1/0.0
double d=(double)1)/0.0d
相同。在Java中,1.0/0.0被定义为等于无穷大。我不同意浮点单位不能区分无穷大和NaN。Sqrt(-1.0)为NaN,但溢出导致无穷大。您是否断言格式化程序为NaN打印输出无穷大?嗯。。我承认我不太懂java。如果你说的是真的,1.0/0.0是无穷大,那么我不得不说java是错误的。我感觉1.0/0.0=无穷大是IEEE754的一部分,但你为什么说它是错误的?
double d=1/0.0;
    System.out.println(d);