rs6000: floating point cast oddities?

Richard Henderson rth@redhat.com
Mon Dec 17 13:57:00 GMT 2001


On Mon, Dec 17, 2001 at 11:35:46AM -0800, Linus Torvalds wrote:
> If the architecture does IEEE fp for floats, I thought the following
> held true:
> 
>   (float)(float + float) = (float)((double)float + (double)float)
> 
> including all the overflow and special cases.

I'd have thought there were possible double rounding issues,
but a brute-force search across a problem range I suspected
didn't yield any differences.

Anyone know for absolute certain here?


r~


main()
{
  union {
    float f;
    unsigned int i;
  } u, x, y;

  unsigned int i;

  for (i = 0x4b8ffff0; i < 0x4c00000f; ++i)
    {
      u.i = i;
      x.f = u.f + 0.5f;
      y.f = (double)u.f + 0.5;
      if (x.i != y.i)
        printf("%08x  %08x\n", x.i, y.i);
    }

  return 0;
}



More information about the Gcc mailing list