Math 在初学者的词汇中,NaN(不是数字)是什么?

Math 在初学者的词汇中,NaN(不是数字)是什么?,math,floating-point,nan,ieee-754,Math,Floating Point,Nan,Ieee 754,我仍然不明白NaN或a(不是实数的数字)到底是什么 主要问题: 什么是NaN值或NaN(用非数学教授的话说) 此外,我还有一些关于整个情况的问题,这些问题让我在理解NaN应该是什么方面产生了不满,这些问题不是回答我主要问题所必需的,而是我想要的: 导致NaN值的操作有哪些 为什么0.0/0.0的结果被声明为未定义?不应该是0吗 为什么任何数学运算的结果都不能用浮点或整数表示?一个值怎么可能是不可表示的 为什么负数的平方根不是实数 为什么NaN不等于unfinite 在整个互联网上,包括在这里的S

我仍然不明白NaN或a(不是实数的数字)到底是什么

主要问题:

  • 什么是NaN值或NaN(用非数学教授的话说)
  • 此外,我还有一些关于整个情况的问题,这些问题让我在理解NaN应该是什么方面产生了不满,这些问题不是回答我主要问题所必需的,而是我想要的:

  • 导致NaN值的操作有哪些

  • 为什么0.0/0.0的结果被声明为未定义?不应该是0吗

  • 为什么任何数学运算的结果都不能用浮点或整数表示?一个值怎么可能是不可表示的

  • 为什么负数的平方根不是实数

  • 为什么NaN不等于unfinite

  • 在整个互联网上,包括在这里的Stack Overflow上,我找不到任何可以理解的关于NaN对我来说是什么的解释


    无论如何,我想提供我的研究作为指向地点的链接,我已经扫描以找到我问题的可理解答案,即使某些链接指向其他编程语言中的同一问题,但没有提供我所需的全部清晰信息:

    维基百科:

    其他:

    堆栈溢出: 其他语言的类似或相同问题(我提供这些问题,因为我认为理解的基础非常相似,如果不相同):

    C++的问题:



    感谢所有有用的回答和评论。

    浮点数被编码为位模式,但并非所有可用的位模式(对于给定数量的位)都被使用,因此有些位模式不编码任何浮点数。如果找到这样的模式,它们将被视为/显示为NaN。

    数学数字系统包含一组值。例如,正整数是0、1、2、3、4等。负整数是-1、-2、-3、-4等(也可能是-0,取决于你的数学分支)

    在computerland中,浮点数还有“无限”和“非数字”等概念。这就像数字的“空”。这意味着“浮点值不代表数学意义上的数字”

    当程序员有一个
    float
    但他们还不想给出数值时,它们对程序员很有用,浮点标准也使用它们来表示操作的“无效”结果

    例如,你可以通过将零除以零得到一个NaN,这是一个在我所知道的任何数学分支中都没有意义值的运算:你如何在没有人的情况下分享许多蛋糕

    (如果您尝试对整数执行此操作,而整数没有NaN或无穷大的概念,您将得到一个[非常命名的]“浮点异常”;换句话说,您的程序将崩溃。)


    请阅读更多,它几乎回答了您的所有问题。

    有关摘要,您可以查看:

    在计算中,NaN代表的不是数字,而是数字的一个成员 可以解释为未定义或未定义的值的数据类型 不可表示的不可表示的,尤指在浮点运算中。系统的 NAN的使用是由年的IEEE 754浮点标准引入的 1985年,以及其他非有限量的表示 比如无穷大

    在实际方面,我要指出这一点:

    如果x或y是NaN浮点:则表达式如下:

    x<y
    x<=y
    x>y
    x>=y
    x==x
    
    为真,这是一种检查x是否为NaN的方法(请参阅)

    另一个注意事项是,当数值计算中出现一些NaN时,您可能会观察到一个大减速(这也可能是调试时的一个提示)

    英特尔CPU上的NaN操作可能会生成异常 调用微码,因此相对速度可能变化很大 与CPU型号


    例如,你在这里问了一系列很好的问题。以下是我试图解决的每一个问题

    什么是NaN值或NaN(用非数学教授的话说)

    让我们假设你在处理实数,比如1,π,e,-137,6.626等等。在实数世界里,有一些操作通常可以执行,但有时没有定义的结果。例如,让我们看看对数。你可以取很多实数的对数:例如,lne=1,ln10约为2.3。然而,从数学上讲,负数的对数没有定义。也就是说,我们不能拿ln(-4)并得到一个真实的数字

    现在,让我们跳到编程领域。假设您正在编写一个程序来计算一个数字的对数,用户希望您以某种方式除以一个负数的对数。该怎么办

    这个问题有很多合理的答案。您可以让操作抛出一个异常,这是在一些语言(如Python)中完成的

    然而,在硬件层面(由设计IEEE-754标准的人员)做出的决定是给程序员第二个选择。与其让程序崩溃,不如让操作生成一个值,表示“你想让我做一些不可能的事情,所以我报告了一个错误”。这样做的方法是让操作生成特殊值
    NaN
    (“不是数字”),表示在计算中的某个地方,您试图执行数学上未定义的操作

    这种方法有一些优点。在许多科学计算环境中,代码执行一系列长时间的计算,定期生成可能感兴趣的中间结果。通过手术
    x!=x