Exception when casting doubles to ints
peter at peter-teichmann.de
Fri Jan 7 13:25:31 PST 2005
Am Donnerstag, 6. Januar 2005 09:50 schrieb alan buckley:
> It appears that when a double that is larger than the maximum
> int is cast to an int a floating point exception occurs. On cygwin
> you do not get an exception, and as the code where I found the
> problem was in lua I suspect other linux/unix variations also do not
> raise an exception. Can anyone confirm the unix behaviour?
> If this is the case should the RISC OS gcc match what unix does?
Floating point exceptions were also one problem when I was porting Quake to
RISC OS. It turned out that on virtually all other OSes all FP exceptions are
not enabled by default, but were on RISC OS.
> The only thing I'd say in defence of this behaviour is that you can cast an
> oversize int to a char and not get an exception so why should floats be
Floats are different because they follow the IEEE Standard 754-1985, where an
overflow exception is raised if the result does not fit into the destination
operands size. The IEEE Standard 754-1985 states that the default response to
an exception shall be to proceed without a trap for all floating point
exceptions (page 10, chapter 7). Even for divide-by-zero, and that is the
smallest problem because there is a representation for infinity in the
float/double FP formats. Try it out by yourself by dividing 1.0/0.0 in a
Linux C program and print the result (+inf). Try even 0.0/0.0 (NaN).
Probably Unixlib should be changed to follow the Standard. I am wondering that
SharedCLib does not follow this standard either...
More information about the gcc