ios - 为什么这些数字没有添加到 Xcode 调试器中?

标签 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 控制台等中一样在调试器中实例化临时变量?例如,让 temp_x = 4
  3. 为什么我的 $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/

相关文章:

ios - Cordova 2.8.1 : camera. getPicture with photolibarary source on ios

ios - 如何使用 UIApplicationDidBecomeActiveNotification

ios - UIAlertView 显示在 KeyWindow 的 subview 下

ios - 线程 1 : EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

ios - 在 ViewDidLoad 中执行 Segue

ios - 使用组合字符串从 url 快速加载图像

swift - 附上渔获物并不详尽(录音)

ios - 我的解析查询直到应用程序的其余部分完成后才完成,我该如何阻止这种情况发生?

swift - "Extra argument ' 当传递 Swift 闭包时完成 ' in call"

ios - 如何在Scenekit场景编辑器中设置漫反射贴图