CGFloat添加错误?

我试图在我的程序中recursion地添加一些CGFloat值。 而我只是意识到,在一个特定的情况下,总生成是不正确的。 为了确保我的程序逻辑没有任何问题,我创build了一个简单的例子(见下面),并打印出相同的错误值。

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打印正确的结果。 我不确定这是一个错误,还是我做错了什么。

谢谢,Murali

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

在进一步学习编程之前,您应该阅读David Goldberg的“每个计算机科学家应该了解的浮点算术” 。