我试图在程序中递归地添加一些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.0000 ...而正确的结果689580720。但是,第二个NSLOG打印出正确的结果。我不确定这是错误还是我做错了什么。

谢谢,穆拉利

有帮助吗?

解决方案

CGFloat 是32位目标(例如iOS)上的单个精度浮点部 - 它只有一个23位Mantissa,即大约6-7个显着数字。如果需要更高的精度,请使用双精度类型。

你可能应该读大卫·戈德堡的 每个计算机科学家对浮点算术都应了解什么 在进行学习编程之前进一步进行之前。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top