How to alter a float by its smallest increment (or close to it)?

Check your math.h file. If you’re lucky you have the nextafter and nextafterf functions defined. They do exactly what you want in a portable and platform independent way and are part of the C99 standard.

Another way to do it (could be a fallback solution) is to decompose your float into the mantissa and exponent part. Incrementing is easy: Just add one to the mantissa. If you get an overflow you have to handle this by incrementing your exponent. Decrementing works the same way.

EDIT: As pointed out in the comments it is sufficient to just increment the float in it’s binary representation. The mantissa-overflow will increment the exponent, and that’s exactly what we want.

That’s in a nutshell the same thing that nextafter does.

This won’t be completely portable though. You would have to deal with endianess and the fact that not all machines do have IEEE floats (ok – the last reason is more academic).

Also handling NAN’s and infinites can be a bit tricky. You cannot simply increment them as they are by definition not numbers.

Leave a Comment