为什么这些数字不会在Xcode Debugger中添加?

时间:2016-03-25 10:57:45

标签: ios xcode swift debugging

我正在使用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个问题..

  1. 什么是2.1815627849240522E-314?这是什么数字?
  2. 是否可以像在Ruby控制台,Chrome控制台等中那样在调试器中实例化临时变量?例如,let temp_x = 4
  3. 为什么我的$R3会返回1000而不是更大的东西?

1 个答案:

答案 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