3

I have come across the nan value in some of my code and I know how to handle it, but when trying to explain what exactly nan means, I realized I'm not sure myself. There are also some similar odd values for things that I would like some clarification on.

inf this clearly means infinity, but will this show up when you reach the maximum float value?

nan what exactly does this mean and when does this value pop up?

nil I think I do know this one. An instance of an object that has not been allocated. I thought it belongs in this list anyway.

null I'm not sure about this one but I think it's similar to nil?

4

2 回答 2

12

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

这实际上并不是 ObjC 的一部分,只是它NSNumber使用它作为-description当持有无限值的时候。

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

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

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

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

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

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

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

+[NSNull null]values 用作实际存在的占位符对象,但不代表任何内容,在您实际上不能没有任何东西的地方(例如,在 an 中NSArray)。

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

null此外,人们经常与混淆NULL,这意味着任何空指针。

所以,当你有一个id, NSObject *,NSSomeOtherClass *等,而你没有任何东西可以指向时,使用nil. 如果您有一个指向非 ObjC 值的指针,例如int *,并且您没有任何东西可以指向,请使用NULL. 如果要将空指针放入集合中,请使用null.

于 2013-06-02T07:09:27.687 回答
2

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

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

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

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

于 2013-06-02T04:13:58.400 回答