• Tom Lane's avatar
    Yet more portability hacking for degree-based trig functions. · 82311bcd
    Tom Lane authored
    The true explanation for Peter Eisentraut's report of inexact asind results
    seems to be that (a) he's compiling into x87 instruction set, which uses
    wider-than-double float registers, plus (b) the library function asin() on
    his platform returns a result that is wider than double and is not rounded
    to double width.  To fix, we have to force the function's result to be
    rounded comparably to what happened to the scaling constant asin_0_5.
    Experimentation suggests that storing it into a volatile local variable is
    the least ugly way of making that happen.  Although only asin() is known to
    exhibit an observable inexact result, we'd better do this in all the places
    where we're hoping to get an exact result by scaling.
    82311bcd
float.c 80.8 KB