为什么CGRectInfinite和CGRect的所有成员设置为INFINITY都有区别?

当处理(无内容)的SpriteKit节点时,我碰到了一个无限的矩形

NSLog(@"%@", NSStringFromCGRect([node calculateAccumulatedFrame])); 

输出

 {{inf, inf}, {inf, inf}} 

我想用CGRectIsInfinite检查这个,但是那个testing失败了,这导致我尝试了下面的检查

 CGRect rect = [node calculateAccumulatedFrame]; if (rect.origin.x == INFINITY && rect.origin.y == INFINITY && rect.size.width == INFINITY && rect.size.height == INFINITY) { if (!CGRectIsInfinite(rect)) { NSLog(@"I don't get it"); } } 

哪些输出: I don't get it ,现在整齐地总结我的立场。

正如allestuetsmerweh在回答中所指出的那样,当我输出这个矩形时,函数对CGRectInfinite返回true

 {{-8.9884656743115785e+307, -8.9884656743115785e+307}, {1.7976931348623157e+308, 1.7976931348623157e+308}} 

(大小都是DBL_MAX

CGRectInfinite背后是什么原因是一个矩形的一些值设置为DBL_MAX是一个矩形,所有元素都设置为INFINITY ? (而API确实将所有成员都设置为INFINITY的CGRect返回)
或者说,为什么没有将设置为INFINITY的元素的矩形注册为CGRectIsInfinite

 CGRect r = CGRectInfinite; NSLog(@"%i", CGRectIsInfinite(r)); //prints "1" 

从文档:

无限矩形是没有定义边界的矩形。 可以创build无限矩形作为平铺filter的输出。 例如,“核心图像”框架透视图filter将创build一个图像,其范围由一个无限矩形描述。

CGRectInfinite背后是什么原因是一个矩形的一些值设置为DBL_MAX是一个矩形,所有元素都设置为INFINITY?

这里有一些猜测:

  1. IEEE 754定义了两个无穷大(+∞和-∞)。 必须select一个(或者CGRectInfinite有不明确的值)。
  2. 无限并不是一个真正的数字。 当转换为string进行序列化时,这可能会导致各种问题。
  3. 在C中使用无穷大的值有点尴尬

为什么没有设置为INFINITY的元素的矩形注册为CGRectIsInfinite?

因为,正如所料, CGRectIsInfinite将它的参数与CGRectInfinite进行了比较(在一些API中它有一个特殊的含义,因此应该是明确可识别的)。