Andrew Gierth <andrew(at)tao11(dot)riddles(dot)org(dot)uk> writes:
> The reason it behaves oddly is this: on i387 FPU (and NOT on arm32 or on
> 32-bit i386 with a modern architecture specified to the compiler), the
> result of 1e200 * 1e180 is not in fact infinite, because it fits in an
> 80-bit long double. So __builtin_isinf reports that it is finite; but if
> it gets stored to memory as a double (e.g. to pass as a parameter to a
> function), it then becomes infinite.
Ah-hah. Can we fix it by explicitly casting the argument of isinf
to double?
regards, tom lane