【问题标题】:Meaning of nan and similar values in ObjCObjC中nan和类似值的含义
【发布时间】:2013-05-28 13:44:14
【问题描述】:

我在一些代码中遇到了nan 值,我知道如何处理它,但是当我试图解释 nan 的确切含义时,我意识到我自己也不确定。对于一些我想澄清的事情,也有一些类似的奇怪值。

inf这显然意味着无穷大,但是当你达到最大浮点值时会出现吗?

nan这到底是什么意思,这个值什么时候弹出来的?

nil我想我知道这个。尚未分配的对象的实例。无论如何,我认为它属于此列表。

null这个我不确定,但我认为它类似于nil?

【问题讨论】:

    标签: objective-c floating-point nan null


    【解决方案1】:

    inf这显然意味着无穷大,但是当你达到最大浮点值时会出现吗?

    这实际上不是 ObjC 的一部分,除了 NSNumber 在持有无限值时将其用作 -description

    NSNumber 中的实际值是 double,它是由 C 定义的,实际上,定义很大程度上取决于平台。但是,在大多数平台上,它是IEEE-754 binary64。 IEEE 754 标准定义了一个affinely extended real number line,具有正无穷和负无穷以及有限值的值。它还精确定义了有限计算溢出到无穷大的不同方式,以及您的代码如何控制它。但是,作为一般规则,是的,如果计算超过 double 的最大有限值,您会得到正无穷大。

    nan这到底是什么意思,这个值什么时候弹出来的?

    这也主要是关于 C 和 IEEE-754,而不是 ObjC(同样,NSNumber-description 除外)。维基百科在NaN 上有一个很好的页面,但是,简单地说,它的意思是“不是一个数字”,它用于没有合理价值的情况,甚至不是无穷大(或者在太多不同值之间模棱两可的情况),比如@ 987654335@.

    nil我想我知道这个。尚未分配的对象的实例。无论如何,我认为它属于此列表。

    nil 不是对象的实例。 nil 是一个空指针,当 没有 没有实例指向时使用。基本上相当于(id)0(NSObject *)0

    但是“一个尚未分配的对象”不是一个对象,也不存在,所以……在某种程度上,首先谈论这样的事情是有意义的,我想你可以说nil 是指向它的指针。

    null这个我不确定,但我认为它类似于nil

    +[NSNull null] 值用作实际存在的占位符对象,但代表什么都没有,在一个你实际上不能没有任何东西的地方(例如,在NSArray )。

    如果您尝试将空指针打印为 C 字符串(例如,NSLog(@"%s", 0)),您也可能会看到 null。但是,您看到的任何代码实际上都不是合法的 C 或 ObjC 代码。

    此外,人们经常将nullNULL 混淆,这意味着任何空指针。

    所以,当你有一个idNSObject *NSSomeOtherClass * 等,而你没有任何东西可以指向时,使用nil。如果您有一个指向非 ObjC 值的指针,例如 int *,但您没有任何东西可以指向,请使用 NULL。当您想将空指针放入集合时,请使用null

    【讨论】:

      【解决方案2】:

      NaN 的意思是“不是数字”。

      当没有一个合理的结果时,浮点运算会产生 NaN。例如,sqrt(–1) 没有可以返回的浮点数可以很好地近似于 –1 的平方根。

      NaN 可用于多种用途。软件可以初始化浮点对象以发送信号 NaN,这样使用一个而不首先为其分配值会导致陷阱。

      安静的 NaN 可以被静默忽略以允许完成大型计算,稍后修复或删除 NaN。 (大多数操作都会传播 NaN:如果将 NaN 和数字相加,则结果是 NaN。)

      【讨论】:

        猜你喜欢
        • 2019-05-30
        • 1970-01-01
        • 2019-09-10
        • 1970-01-01
        • 2021-11-08
        • 1970-01-01
        • 1970-01-01
        • 2016-05-02
        • 1970-01-01
        相关资源
        最近更新 更多