[floats][infinity][C99]
Raymond Toy
toy.raymond at gmail.com
Fri Sep 4 15:22:23 UTC 2015
>>>>> "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
More information about the ecl-devel
mailing list