我读过关于浮点的内容,我知道NaN可能来自操作.但我无法完全理解这些概念是什么.有什么区别?
在C++编程期间可以生成哪一个?作为程序员,我可以编写一个程序来导致sNaN吗?
确定给定的浮点数arg是否正常,即既不是零,也不是正常,无限,也不是NaN.
数字为零,无限或NaN很清楚它意味着什么.但它也说低于正常.什么时候是一个数字次正常?
我只是好奇这个:
1/0在Java中进行评估时,会发生以下异常:
线程"main"中的异常java.lang.ArithmeticException:/在Foo.main中为零(Foo.java:3)
但是1/0.0被评估为Infinity.
public class Foo {
public static void main (String[] args) {
System.out.println(1/0.0);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
我正在从数据库中收集一些数据并将它们一起添加以获得一些统计数据,但由于我回溯了一些数据,因此计算的总和有时会出现NaN(不是数字)我想创建一个if句子,如果(不是数字)然后从我的表中排除这些数据.
如何测试数据(在本例中为double)是否为NaN?
我不是问"为什么这个计算结果是NaN",我问"为什么NaN存在,而不是导致异常或错误?"
我一直想知道这一点,并与人们一起讨论.
我得到的唯一答案就是"你不想尝试 - 抓住每一个分歧,你呢?" 或"有些情况下NaN是有效的结果".
话虽如此,我从来没有收到过NaN作为有效结果的具体例子.假设NaN不可能是一个有效的结果,我不明白为什么它存在.如果它出现,据我所知,你有一个错误.期.
您希望程序崩溃并在那里死亡,以便您可以轻松找到出错的地方.这不是让程序运行失败,而是可能写入损坏的数据,可能发送损坏的数据,或做各种令人讨厌的事情 - 在不可避免地崩溃之前.(如"实用程序员"中所述 - 崩溃,不要垃圾")
现在,我相信IEEE 754的设计师比我聪明得多,这让我相信它是其存在的理由.这是什么原因?
我遇到了以下两个代码.为什么它不会为浮点引发异常,而在其他情况下它会抛出运行时异常.
class FloatingPoint
{
public static void main(String [] args)
{
float a=1000f;
float b=a/0;
System.out.println("b=" +b);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:b =无穷大.
如果我尝试使用int值,那么它将抛出运行时异常.为什么会这样?
我仍然不明白 NaN 或 a (数字不是\xc2\xb4t 实数)到底是什么。
\n\n主要问题:
\n\n此外,我对整个情况有几个问题,这让我在理解 NaN 应该是什么时抱怨,这对于回答我的主要问题来说不是必要的,但却是我想要的:
\n\n哪些操作会导致结果为 NaN 值?
为什么 0.0 / 0.0 的结果被声明为未定义?\xc2\xb4不应该是0吗?
为什么任何数学运算的结果都不能用浮点数或整数来表示?一个值怎么可能是不可表示的呢?
为什么负数的平方根不是实数?
为什么 NaN 不等于不定?
在整个互联网上,包括 Stack Overflow 上,我没有找到任何可以理解的解释 NaN 对我来说是什么。
\n\n无论如何,我想将我的研究作为地方链接提供,我已经扫描以找到我的问题的可以理解的答案,即使某些链接在其他编程语言中指向同一问题,但总体上没有给我所需的清晰信息:
\n\nhttps://en.wikipedia.org/wiki/NaN
\n\nhttps://en.wikipedia.org/wiki/IEEE_754
\n\nhttp://foldoc.org/Not-a-Number
\n\nhttps://www.youtube.com/watch?v=HN_UmxIVS6M
\n\nhttps://www.youtube.com/watch?v=9EsHjXftO7s
\n\n其他语言的类似或相同问题(我提供这些问题是因为我认为理解的基础即使不相同,也是非常相似的):
\n\n\n\n\n\n\n\n …我有一个double[]它有一个值NaN.当我添加数组的元素时,也会NaN产生结果NaN.
这是怎么发生的?如何防止将NaN其添加到我的数组的其余部分?
我正在解析"NaN"值为double,它给我的是"NaN".
double d = Double.parseDouble("NaN");
System.out.println(d);
Run Code Online (Sandbox Code Playgroud)
它正在打印"NaN"值.我很惊讶,因为我希望解析一个非数字的双重将导致NumberFormatExceptionJava.
任何人都可以解释为什么解析成功了,真正存储在变量中的是什么?
获得最小数量的最佳方式是什么,哪种方式提高了性能,或者两者都与性能相同?
获得两个数字之间最小距离的一种方法:
double minDistance = Double.MAX_VALUE;
double distance = coordinate1.distnaceTo(coordinate2);
if(distnace < minDistance ) {
minDistance = distance;
}
Run Code Online (Sandbox Code Playgroud)
获得两个数字之间最小距离的另一种方法:
double minDistance = Double.MAX_VALUE;
double minDistance = Math.min(coordinate1.distnaceTo(coordinate2), minDistance);
Run Code Online (Sandbox Code Playgroud) 在Java中,我除以零,这显然不会产生数字.
public class tempmain {
public static void main(String args[])
{
float a=3/0;
System.out.println(a);
}
}
Run Code Online (Sandbox Code Playgroud)
我希望输出为"NaN",但它显示以下错误:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at tempmain.main(tempmain.java:6)
Run Code Online (Sandbox Code Playgroud)
是否有任何方式(除此之外if(denominator==0))可以显示NaN?