Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
当我这样做时:
NSLog(@"%i",1.5 - 1.00 == 0.5);
我得到 1,但是当我这样做时:
NSLog(@"%i",1.33 - 1.00 == 0.33);
我得到0。
有没有办法解决这个问题?
问题在于浮点计算的精度:您通常应该避免使用==运算符比较浮点数和双精度数是否相等,而更喜欢检查差异是否小于微小的epsilon(例如1E-9)。
==
1E-9
#include <math.h> ... NSLog(@"%i", abs(((1.33 - 1.00) - 0.33) < 1E-9);
第一个示例有效,因为数字由 2:1 = 2^0和的幂组成0.5 = 2^-1。第二个示例中的数字不能精确地分解为 2 的幂,因此相等性检查不起作用。
1 = 2^0
0.5 = 2^-1