Largest representable negative floating-point number

4.3k Views Asked by At

What is a platform-independent way of specifying the largest representable negative floating-point number?

We found an algorithm that broke when run on a PS3's SPU, but worked fine when compiled for the PPU:

float x = -FLT_MAX;
/* stuff */
if (x > 0.0f) {
    // If x is unchanged, code is executed on SPU
}

Essentially, is there a well-defined negative equivalent of FLT_MAX?

2

There are 2 best solutions below

3
On BEST ANSWER

Without knowing what's in /* stuff */, I don't think your problem can be fully addressed here.

There's a good set of slides on the problems inherent in floating point calculation here: http://realtimecollisiondetection.net/pubs/GDC07_Ericson_Physics_Tutorial_Numerical_Robustness.ppt - there may be some hint for you in there as to the source of your problem.

IEEE 754 single precision floating point is not the same on the SPU as it is on the PPU - there's a full explanation in chapter 9 of the SPU ISA document available from http://cell.scei.co.jp/e_download.html which also includes the maximum magnitude of a single precision floating point number.

1
On

You want std::numeric_limits::lowest(), but it is c++0x only, so not very cross platform at the moment.

You definitely don't want std::numeric_limits::min() - that is smallest magnitude, not furthest negative.

If you want something that will always be less than all other doubles, use -numeric_limits<double>::infinity().