我正在使用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
?这是什么数字? let temp_x = 4
?$R3
会返回1000而不是更大的东西?答案 0 :(得分:4)
2.1815627849240522E-314
基本上为零。 1000 + 0 = 1000
。
浮点数有两部分 - 尾数和指数(小数点的位置)。 e-341
表示"将小数点向右移动341个位置"
将1000
添加到非常小的数字会创建一个相等的数字
1000.000...(> 300 zeros here)...2181567849240522
即使double
尾数也不能代表这样的数字(double
最多可以代表17个十进制数字),所以它只需要更重要的数字。
我建议你仔细阅读What Every Programmer Should Know About Floating-Point Arithmetic