目标-c中函数pow()的奇怪行为

时间:2012-10-13 13:59:35

标签: objective-c

我的应用程序中有pow()的愚蠢问题。这是代码:

double xf = 0.0153846154;

NSLog(@"%.10f", xf);
if (abs(xf) < (5.0 * pow(10.0, -9.0))) {
    NSLog(@"%.10f", 5.0 * pow(10.0, -9.0));
}

但如果我尝试这个比较是正确的:

if (abs(xf) >= pow(10.0, 10.0)) {
    NSLog(@"%f", pow(10.0, 10.0));
}

我的日志是:

2012-10-13 15:45:24.587 myApp[22941:c07] 0.0153846154
2012-10-13 15:45:28.950 myApp[22941:c07] 0.0000000050

有人可以解释我为什么是0.0153846154&lt; 0.0000000050

1 个答案:

答案 0 :(得分:4)

abs是一个整数函数,因此xf被截断为0,因此函数结果为0,然后将其强制转换回0.0比较。

您需要使用fabs

NSLog(@"%.10f", xf);
if (fabs(xf) < (5.0 * pow(10.0, -9.0))) {
    NSLog(@"%.10f", 5.0 * pow(10.0, -9.0));
}