我正在使用 Xcode 调试器,这些数字似乎没有相加。我很好奇为什么:
(lldb) p height
(CGFloat) $R0 = 2.1815627849240522E-314
(lldb) p frame.size
(CGSize) $R1 = (width = 375, height = 1000)
(lldb) p frame.size.height
(CGFloat) $R2 = 1000
(lldb) p height + frame.size.height
(CGFloat) $R3 = 1000
我对此有 3 个问题..
- 什么是
2.1815627849240522E-314
?那是什么样的数字? - 是否可以像在 Ruby 控制台、Chrome 控制台等中一样在调试器中实例化临时变量?例如,
让 temp_x = 4
? - 为什么我的
$R3
返回 1000 而不是……更大的值?
最佳答案
2.1815627849240522E-314
基本上为零。 1000 + 0 = 1000
。
float 有两部分 - 尾数和指数(小数点的位置)。 e-341
意思是“小数点向右移动 341 位”
将 1000
添加到这个非常非常小的数字中会创建一个相等的数字
1000.000...(> 300 zeros here)...2181567849240522
即使是 double
尾数也无法表示这样的数字(double
最多可以表示 17 位十进制数字),因此它只在开头使用更重要的数字。
我鼓励您通读What Every Programmer Should Know About Floating-Point Arithmetic
关于ios - 为什么这些数字没有添加到 Xcode 调试器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36218640/