2012-01-12 63 views
-1

精确复制:
Issue with float and double data types in objective C数据类型的OBJ-C

[讽刺的是,要找到你所需要知道的答案重复的问题。]

+2

要引用[维基百科文章](http://en.wikipedia.org/wiki/Floating_point)的主题,“某些数字(例如1/3和0.1)不能完全用二进制浮点数表示,不管精度如何,都要指出。“ – aroth 2012-01-12 23:09:13

+0

这是一个常见的问题,它与目标c相比,更多地涉及浮点表示的一般计算机科学主题。我会标记许多重复问题之一。 – 2012-01-12 23:12:29

+0

至于为什么'NSLog'打印的方式与'gdb'不同,32位浮点数对于大约7位数的精度是有好处的。因此,似乎'NSLog'可能会在第七位后截断以提供更有意义的输出,而'gdb'则显示了存储在变量中的确切值,但未考虑精度。有趣的是,我认为有人可能会认为两种行为在他们的特定背景下都是正确的。 – aroth 2012-01-12 23:12:42

回答

0

0.1是二进制(0.0001100110011 ...)中的“重复小数”,因此0.1的表示形式不精确。 NSLog可能会四舍五入或截断输出。

+0

在* binary *中重复* decimal *? (我知道你的意思,这只是一个奇怪的说法。)() – 2012-01-12 23:11:01

+0

把它称为“二进制重复二进制”听起来更糟糕。有没有一种标准的方法来引用其他基地中的重复小数部分的数字? – 0x5f3759df 2012-01-12 23:12:13

+0

“一个有重复小数部分的数字”?但我承认“重复小数”可以清楚地表达出想法 – 2012-01-12 23:15:47