CGFloat添加错误?

时间:2011-09-04 21:57:22

标签: objective-c ios xcode4 cgfloat

我试图在程序中递归添加一些CGFloat值。我刚刚在一个特定场景中意识到生成的总数是不正确的。为了确保我的程序逻辑没有任何问题,我创建了一个简单的场景示例(见下文),并打印出相同的错误值。

CGFloat arr[3] = {34484000,512085280,143011440};
CGFloat sum = 0.0;
sum = arr[0] + arr[1] + arr[2];

NSLog(@"%f",sum);

int arr1[3] = {34484000,512085280,143011440};
int sum1 = 0.0;
sum1 =  arr1[0] + arr1[1] + arr1[2];

NSLog(@"%d",sum1);

第一个NSLog打印689580736.000000 ...而正确的结果689580720.但是第二个NSLog打印正确的结果。我不确定这是一个错误还是我做错了什么。

谢谢, 穆拉利

1 个答案:

答案 0 :(得分:11)

CGFloat是32位目标(如iOS)上的单精度浮点数 - 它只有23位尾数,即大约6 - 7位有效数字。如果您需要更高的准确度,请使用双精度类型。

在进一步学习编程之前,你应该阅读David Goldberg的What Every Computer Scientist Should Know About Floating-Point Arithmetic