最低值d
是什么......
f - d != f
f + d != f
...对于任何CGFloat
f
(无穷大除外)?
例如,它不是1
。
CGFloat f = CGFLOAT_MAX;
CGFloat d = 1;
NSLog(@"%d", f - d != f); // Prints 0
答案 0 :(得分:3)
如果“任何CGFLOAT
”真正意味着CGFLOAT
可以采用的任何值,那么答案就是无限。否则,f
可能是无穷大(合法值),f-d
对于任何有限值f
都等于d
。
如果f
限于有限值,则d
为2 970 如果CGFLOAT_IS_DOUBLE
设置为2 103 ,否则。这是因为当d
被添加到CGFLOAT
可能具有的最大有限值时,这些是导致更改所需的最小值。
这些无疑不是您正在寻找的价值观。正如Stephen Canon所说,你真正想做什么?
答案 1 :(得分:0)
值
f - d != f
f + d != f
对于所有可能的浮点数,不固定。您可能已经得出了自己的结论,因为您可以清楚地看到,对于d = 1和f = 5.0,f-d = 4.0 ...但这不适用于CGFLOAT_MAX。
这是因为浮点数如何存储在内存中,它们以基数和指数存储,因此并非所有数字都被表示。
答案 2 :(得分:0)
这取决于您平台上CGFLOAT的定义。
当前平台使用float(通常在编译32位平台时)或double(通常在编译64位平台时)。
32位浮点数使用23位作为分数,这意味着d
可能在CGFLOAT_MAX/2^23
附近
64位双精度使用52位作为分数,这意味着d
可能在CGFLOAT_MAX/2^52
附近
答案 3 :(得分:0)
d
的最小值取决于f
的值。
问题是CGFloat
仅支持一定数量的有效数字,并不是所有浮点数都准确表示。
以下不是确切的结果,而是用来说明问题。
如果f
为1.0
,则d
可能需要0.0000001
。但如果f
为1000000.0
(一百万),则d
必须为0.1
。
基本上d
的值必须在f
的有效数字范围内,才能使结果显而易见。
考虑使用NSDecimalNumber
能够完全代表大数字来消除此问题。