Alexandre
Alexandre

Reputation: 410

NSNumber doubleValue 0 doesn't return exactly 0

I'm dealing with an NSMutableArray of NSNumber and I ran into a weird bug. The [NSNumber doubleValue] (construct with double 0) seems to not to be equals to 0.0.

The bug appears in the simpliest function ever : the max function.

- (double) maxValY{
    double max = DBL_MIN;
    for (NSNumber *doubleNumber in arrayNumbers) {
            if (max<[doubleNumber doubleValue]){
                max = [doubleNumber doubleValue];
            }

    }

    NSLog(@"max %f",max);
    if(max <=0.0){
        NSLog(@"max is equal to 0");
        return 1;
    }else{
        NSLog(@"max is not equal to 0");
    }

    return max;
}

The console prints :

2013-01-02 11:27:56.208 myApp[1920:c07] max 0.000000
2013-01-02 11:27:56.210 myApp[1920:c07] max is not equal to 0

Upvotes: 0

Views: 503

Answers (1)

lxt
lxt

Reputation: 31304

This isn't a bug: it's double precision. With floating point number what you see is not necessarily what you're getting. This question has some more information:

Why do I see a double variable initialized to some value like 21.4 as 21.399999618530273?

The easiest solution is going to be to cast to an integer, if all you care about is whether a number is equal or greater than zero. There are other alternatives that are more complex: the answer I've linked to has a few. The link someone gave you in the comments about floating point mathematics may also be helpful.

Upvotes: 2

Related Questions