"Daniel" == Daniel Kochma <Daniel> writes:
Daniel> Hello, Daniel> I'm little in doubt. Problem is related to ieee-floating-point Daniel> extensions, which provide infinities and nan. Everything works fine Daniel> until we generate C code, which simply breaks, because it isn't taken Daniel> into account.
Daniel> There are two possible solutions:
Daniel> - for these cases use constant expressions, which trigger an error on Daniel> some compilers, that is (0.0 / 0.0) for nan, (1.0 / 0.0) for infinity
Daniel> - use defined by C99 macros: INFINITY and NAN, which will work on any Daniel> compiler supporting C99.
Option 3: Create them yourself in portable C. Something like
union { int i[2]; double d; } u;
/* +Infinity */ u.i[MSB] = 0x7ff00000; u.i[LSB] = 0; u.d is +Infinity
where MSB and LSB are 0 or 1 depending on the endianness of machine. If you have 64-bit integers, you can replace int i[2] with long i and just use i = 0x7ff0000000000000;
This works for NaN too, but there are many different values for NaN, so you'll have to choose something.
-- Ray