0

アプリケーションの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));
}

しかし、私がこれを試してみると、1つの比較は正しいです:

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<0.0000000050であるか説明できますか

4

1 に答える 1

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));
}
于 2012-10-13T14:08:54.713 に答える