Hi cafe,
It's been my general impression that when neither Haskell nor C
defines behavior in a particular situation, the behavior nonetheless
matches. I was surprised to observe
Prelude Data.Int> round (4294967295 :: Double) :: Int16
-1
when
#include
#include
int main(void) {
double d = 4294967295;
int16_t r = (int16_t) d;
printf("%"PRId16"\n", r);
return 0;
}
yields 0 when compiled and run.
As far as I can tell, neither language defines what this result should
be, so neither is doing anything wrong here. But I was surprised that
they differ; does anyone know why Haskell's rounding operation behaves
the way it does (maybe there is some historical reason)? Or can
someone perhaps point me to a standards document I missed that states
how the language must round out-of-bounds inputs?
Regards
Matt Peddie