• S
    math: rewrite hypot · c2a0dfea
    Szabolcs Nagy 提交于
    method: if there is a large difference between the scale of x and y
    then the larger magnitude dominates, otherwise reduce x,y so the
    argument of sqrt (x*x+y*y) does not overflow or underflow and calculate
    the argument precisely using exact multiplication. If the argument
    has less error than 1/sqrt(2) ~ 0.7 ulp, then the result has less error
    than 1 ulp in nearest rounding mode.
    
    the original fdlibm method was the same, except it used bit hacks
    instead of dekker-veltkamp algorithm, which is problematic for long
    double where different representations are supported. (the new hypot
    and hypotl code should be smaller and faster on 32bit cpu archs with
    fast fpu), the new code behaves differently in non-nearest rounding,
    but the error should be still less than 2ulps.
    
    ld80 and ld128 are supported
    c2a0dfea
hypotl.c 1.2 KB