当前位置: 首页 > 知识库问答 >
问题:

用初学者的话来说,NaN(不是数字)是什么?[已关闭]

毛胜
2023-03-14

想改进这个问题吗 通过编辑此帖子,更新问题,使其只关注一个问题。

未解决原始关闭原因

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

主要问题:

  1. NaN值或NaN到底是什么(用非数学教授的话来说)?

此外,我还有一些关于整个情况的问题,这些问题让我在理解NaN应该是什么方面感到不满,这些问题对于回答我的主要问题并不必要,但却是我想要的:

导致 NaN 值结果的操作是什么?

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

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

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

为什么南不等同于不定?

在整个互联网上,包括这里的堆栈溢出,我没有找到任何可以理解的关于NaN对我来说是什么的解释。

无论如何,我想提供我的研究作为地方的链接,我已经扫描过,以找到我的问题的可理解答案,即使有些链接在其他编程语言中指向相同的问题,但没有给我所需的明确信息:

https://en.wikipedia.org/wiki/NaN

https://en.wikipedia.org/wiki/IEEE_754

http://foldoc.org/Not-a-Number

https://www.youtube.com/watch?v=HN_UmxIVS6M

https://www.youtube.com/watch?v=9EsHjXftO7s

对于其他语言,类似或相同的问题(我提供它们,因为我认为理解的基础非常相似,如果不相同的话):

在Java中,NaN是什么意思?

IEEE754 NaN值的所有比较返回false的基本原理是什么?

JavaScript中检查字符串是否为有效数字的(内置)方法

脚本:什么是 NaN、对象或原始?

不是数字(NaN)

C的问题 :

安静NaN和发信号NaN有什么区别?

检查双精度(或浮点)在C #中是否为NaN

为什么NaN-NaN==0.0与英特尔C编译器?

IND和NAN号有什么区别

感谢您提供的所有有用的答案和评论。

共有3个答案

邹杰
2023-03-14

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

莘康裕
2023-03-14

有关摘要,您可以查看维基媒体页面:

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

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

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

x<y
x<=y
x>y
x>=y
x==x

总是错误的。然而,

x!=x

将为真,这是一种检查 x 是否为 NaN 的方法(请参阅 std::isnan)。

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

英特尔 CPU 上的 NaN 操作可能会生成调用微码的异常,因此相对减速可能因 CPU 型号而异。

比如说,看看南京经济放缓

芮意
2023-03-14

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

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

假设你使用的是实数,比如1,π,e,-137,6.626等等。在实数领域,有些运算通常是可以执行的,但有时没有定义的结果。例如,让我们看对数。你可以取许多实数的对数:例如,ln e=1,ln 10大约是2.3。然而,从数学上讲,负数的对数是没有定义的。也就是说,我们不能取ln(-4)并得到一个实数。

那么现在,让我们跳到编程领域。想象一下,你正在编写一个计算一个数的对数的程序,不知怎么的,用户想让你用一个负数的对数来除。应该会发生什么?

这个问题有很多合理的答案。您可以让操作抛出异常,这在Python等某些语言中是这样做的。

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

这种方法有一些优点。在许多科学计算设置中,代码执行一系列长时间计算,定期生成可能感兴趣的中间结果。通过让未定义的操作产生 NaN 作为结果,程序员可以编写代码,只按照他们想要的方式执行数学运算,然后在代码中引入特定的点,在那里他们将测试操作是否成功。从那里,他们可以决定做什么。与此形成鲜明对比的是,将异常触发或使程序完全崩溃 - 这意味着程序员要么需要保护每个可能失败的浮点操作系列,要么必须自己手动测试。这是对哪个选项更好的判断调用,这就是为什么您可以启用或禁用浮点 NaN 行为的原因。

导致 NaN 值结果的操作是什么?

有多种方法可以从操作中获得NaN结果。这里有一个取样器,虽然这不是一个详尽的列表:

    < li >取负数的对数。 < li >取负数的平方根。 < li >从无穷大中减去无穷大。 < li >对< code>NaN执行任何算术运算。

然而,有些操作即使在数学上没有定义,也不会产生NaN。例如,将一个正数除以零就得到了正无穷大,尽管这并没有数学上的定义。这样做的原因是,当y从正方向接近零时,如果对正x取x/y的极限,那么值会毫无限制地增长。

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

这更像是一个数学问题。这与极限是如何工作的有关。我们来思考一下如何定义0 / 0。一种选择是这样说:如果我们看表达式0 / x,当x接近零时取极限,那么我们在每一点都会看到0,所以极限应该是0。另一方面,如果我们看表达式x / x,当x接近0时取极限,我们会在每个点看到1,所以极限应该是1。这是有问题的,因为我们希望0 / 0的值与你在计算这两个表达式时发现的一致,但是我们不能选择一个有意义的固定值。结果,0 / 0的值被计算为< code>NaN,表明这里没有明确的值可以赋值。

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

这与IEEE-754浮点数的内部结构有关。直觉上,这归结为一个简单的事实:

  1. 有无限多的实数,无限多的实数具有无限长的非重复小数,但是
  2. 您的计算机具有有限的内存。

因此,存储一个任意的实数可能需要存储一个无限长的数字序列,这是我们有限内存的计算机做不到的。因此,我们用浮点数存储并不庞大的实数的近似值,无法表示值是因为我们只存储近似值。

有关数字的实际存储方式以及这在实践中的含义的更多信息,请查看传奇指南“每个程序员应该了解浮点运算”

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

我们走吧√例如,(-1)。假设这是一个实数x;也就是说,假设x=√(-1). 平方根的概念是,它是一个数字,如果乘以它本身,就会返回你取平方根的数字。

因此...x是几号?我们知道x ≠ 0,因为02 = 0不是-1。我们也知道x不可能是正数,因为任何正数乘以它本身都是正数。而且我们也知道x不可能是负数,因为任何负数乘以它本身就是正数。

我们现在有一个问题。无论这个x是什么,它都需要不是正的,不是零,也不是负的。这意味着它不是一个实数。

您可以通过引入一个数字 i,其中 i2 = -1,将实数推广为复数。请注意,由于上述原因,没有实数这样做。

为什么南不等同于不定?

“不确定”和“不管是什么,都不是实数”是有区别的例如,0 / 0可以说是不确定的,因为根据你接近0 / 0的方式,你可能得到0,或者1,或者别的什么。另一方面,√(-1)被完美地定义为一个复数(假设我们有√(-1)return I而不是-i),所以问题不在于“这是不确定的”,而在于“它有一个值,但是那个值不是一个实数。”

希望这有帮助!

 类似资料:
  • 一、什么是数学? 数学是研究数量、结构、变化以及空间模型等概念的一门科学。 二、数学的特点 数学区别于其他学科的明显特点有三个: 1. 抽象性, 2. 精确性, 3. 应用的极端广泛性。 三、数学的三个传统领域: 1. 研究数的理论的代数学, 2. 研究形的理论的几何学, 3. 沟通形与数且涉及极限运算的分析学, 4. 数学中最重要、最典型的思维方式是演绎,即由基础概念与公理推导出所有的定理。演绎

  • 最近,我做了一些关于如何在AWS上托管一个MEAN stack web应用程序的研究。 我所学习的教程之一是https://www.youtube.com/watch?v=z87h9_1caho,该教程从nodesource.com添加了一个NodeJS PPA。 有人能告诉我使用NodeSource是否纯粹是任意的,或者当涉及到在AWS上托管一个MEAN stack web应用程序时,“Node

  • 在我开始之前,我想让每个人都知道,我确实花了很多时间在谷歌上搜索,找到了很多解释和定义。但即便如此,在花了几个小时阅读后,这个主题仍然显得相当模糊。我知道我必须问一些能让社区变得更好的问题,但是这个问题只是让我看看我是否对JavaBeans有清晰的理解。 据我所知,JavaBean基本上与任何其他java类一样都是一个类,只是它遵循某些约定,即: 类必须实现可序列化 假定类属性是私有的,并且它们的

  • 编辑问题以包括所需的行为、特定问题或错误,以及再现问题所需的最短代码。这将帮助其他人回答这个问题。 我在测试中有一个问题,但我不知道答案:( 多态性是什么? 1-它是一个类,其操作也可以应用于其他类的值2-它为不同类型的实体提供多个接口3-它将数据和函数打包到一个组件中4-它是一种代码重用机制,并允许通过公共类和接口对原始软件进行独立扩展

  • 问题内容: 我正在研究用Java编写音频合成器,并且想知道是否有人对编写这样的程序有任何建议或良好的资源。我正在寻找有关生成原始声波,如何将其输出为可用形式(通过扬声器播放)以及有关该主题的一般理论的信息。多谢你们。 问题答案: 这个问题基本上是关于将函数映射到数字数组。支持一流功能的语言在这里非常有用。 请访问 http://www.harmony-central.com/Computer/Pr

  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 是否有一些相对不错的新书,但不是一个相对全新的* nix用户,可以获取更多的深入知识(因此,没有“用于虚拟人的Linux”)吗?在大多数情况下,我不是在寻找从头