Java双除法正数
Posted
技术标签:
【中文标题】Java双除法正数【英文标题】:Java double division positiveness 【发布时间】:2021-11-07 09:52:24 【问题描述】:为什么这段 java 代码会产生正无穷大?
double d = 10.0 / -0;
System.out.println(d);
if (d == Double.POSITIVE_INFINITY)
System.out.println("Positive Infinity");
else
System.out.println("Negative Infinity");
【问题讨论】:
因为你除以零。 负零?零不能为负数。 @David 在数学上你是对的。在计算中不一定。 Java 和许多其他编程语言将-0.0
识别为与0.0
不同的值。我承认这可能会令人困惑。
【参考方案1】:
虽然double
区分正零和负零,但int
不区分。因此,当您将值为 0 的 int
转换为 double
时,您总是得到“正零”。
-0
是一个int
,它的值为0。
除以“负零”得到负无穷大。为此,您需要将除数指定为double
(而不是int
):
double d = 10.0 / -0.0;
System.out.println(d);
if (d == Double.POSITIVE_INFINITY)
System.out.println("Positive Infinity");
else
System.out.println("Different from Positive Infinity");
if (d == Double.NEGATIVE_INFINITY)
System.out.println("Negative Infinity");
else
System.out.println("Different from Negative Infinity");
输出:
-Infinity Different from Positive Infinity Negative Infinity
【讨论】:
【参考方案2】:负零等于零。因此,
double d = 10.0 / -0;
等价于
double d = 10.0 / 0;
这是正无穷大。
另一方面,如果你有:
double d = 10.0 / -0.0;
您将得到负无穷大(因为现在第二个值是双精度数,用于区分正/负零)。
【讨论】:
谢谢! “double d = 10.0 / -0f;”让我更加困惑。产生负无穷大。为什么 0 作为浮点数会变成负数? 是的,就像@Ole V.V.指出,double/int 确实很重要。我已经编辑了我的答案以更好地回答这个问题【参考方案3】:这一输出是double d = 10.0 / -0;
===> 正无穷
但是如果你需要为输出获得负无穷大,你可以改变这个代码.....
double d = 10.0 / -0.0;
现在,您可以获得“负无穷大”的输出。
原因 --->(数据类型。 首先你使用 double/int.... 第二个选项是双/双..... )
【讨论】:
以上是关于Java双除法正数的主要内容,如果未能解决你的问题,请参考以下文章