【问题标题】:what is .nan in D programming language?D编程语言中的.nan是什么?
【发布时间】:2014-11-07 13:13:27
【问题描述】:

来自 D 编程教程:

我们已经看到这是浮点的默认值 变量。 .nan 可能由于无意义的浮点数而出现 表达式也是如此。例如浮点表达式 以下程序都产生double.nan:

import std.stdio;

void main()
{
    double zero = 0;
    double infinity = double.infinity;

    writeln("any expression with nan: ", double.nan + 1);
    writeln("zero / zero            : ", zero / zero);
    writeln("zero * infinity        : ", zero * infinity);
    writeln("infinity / infinity    : ", infinity / infinity);
    writeln("infinity - infinity    : ", infinity - infinity);
}

但是 double.nan 到底是什么?当然它必须是某种数字?这不一定会导致冲突吗?

【问题讨论】:

标签: floating-point double expression d nan


【解决方案1】:

nan 表示“不是数字”,它基本上是浮点运算中的错误指示符。任何带有 nan 的数学都会导致 nan,因为其他任何东西都是没有意义的。这就是为什么 nan+1 == nan。除以零产生 nan,因为没有其他意义。

【讨论】:

  • 我的问题是,尽管有这个名字,nan 在内部仍然由一个数字表示,即(根据维基百科)s111 1111 1axx xxxx xxxx xxxx xxxx xxxx。那么,如果nan用这个数字表示,如果要自己使用这个数字怎么办呢?
  • 哦,我明白你的意思了。是的,有一个表示 nan 的位序列,但它与正常使用不冲突(尽管请注意浮点值不精确)。 double 中的其他位表示符号、指数和值。因此,从概念上讲,存储数字 15300 被打包为更像 1.53 x 10^4,其中 1.53 和 4 被打包在那些 xxxx 位中。我提到的精度确实意味着并非所有可以用 64 位整数表示的精确值都可以用双精度表示 - 实际上有些位用于表示 nan 之类的东西 - 但四舍五入主要隐藏了这一点
  • 好的,明白了。数字系统的表示在计算机中是稀疏的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
  • 2022-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多