1. 12 12月, 2012 6 次提交
    • S
      math: add a non-dummy tgamma implementation · 0f53c1a4
      Szabolcs Nagy 提交于
      uses the lanczos approximation method with the usual tweaks.
      same parameters were selected as in boost and python.
      (avoides some extra work and special casing found in boost
      so the precision is not that good: measured error is <5ulp for
      positive x and <10ulp for negative)
      
      an alternative lgamma_r implementation is also given in the same
      file which is simpler and smaller than the current one, but less
      precise so it's ifdefed out for now.
      0f53c1a4
    • S
      math: cosh cleanup · 14cc9c7f
      Szabolcs Nagy 提交于
      do fabs by hand, don't check for nan and inf separately
      14cc9c7f
    • S
      math: fix comment in __rem_pio2f.c · 9c6b1de0
      Szabolcs Nagy 提交于
      9c6b1de0
    • S
      math: add empty __invtrigl.s to i386 and x86_64 · 1384ad5f
      Szabolcs Nagy 提交于
      __invtrigl is not needed when acosl, asinl, atanl have asm
      implementations
      1384ad5f
    • S
      math: clean up inverse trigonometric functions · b12a73d5
      Szabolcs Nagy 提交于
      modifications:
      * avoid unsigned->signed conversions
      * removed various volatile hacks
      * use FORCE_EVAL when evaluating only for side-effects
      * factor out R() rational approximation instead of manual inline
      * __invtrigl.h now only provides __invtrigl_R, __pio2_hi and __pio2_lo
      * use 2*pio2_hi, 2*pio2_lo instead of pi_hi, pi_lo
      
      otherwise the logic is not changed, long double versions will
      need a revisit when a genaral long double cleanup happens
      b12a73d5
    • S
      math: rewrite inverse hyperbolic functions to be simpler/smaller · 482ccd2f
      Szabolcs Nagy 提交于
      modifications:
      * avoid unsigned->signed integer conversion
      * do not handle special cases when they work correctly anyway
      * more strict threshold values (0x1p26 instead of 0x1p28 etc)
      * smaller code, cleaner branching logic
      * same precision as the old code:
          acosh(x) has up to 2ulp error in [1,1.125]
          asinh(x) has up to 1.6ulp error in [0.125,0.5], [-0.5,-0.125]
          atanh(x) has up to 1.7ulp error in [0.125,0.5], [-0.5,-0.125]
      482ccd2f
  2. 08 12月, 2012 1 次提交
  3. 18 11月, 2012 5 次提交
    • S
      math: use float constants in exp10f.c · a764db9a
      Szabolcs Nagy 提交于
      use the 'f' suffix when a float constant is not representable
      a764db9a
    • S
      math: expl.c cleanup · e93a0fe4
      Szabolcs Nagy 提交于
      raise overflow and underflow when necessary, fix various comments.
      e93a0fe4
    • S
      math: expf.c cleanup · ab1772c5
      Szabolcs Nagy 提交于
      similar to exp.c cleanup: use scalbnf, don't return excess precision,
      drop some optimizatoins.
      exp.c was changed to be more consistent with expf.c code.
      ab1772c5
    • S
      math: cleanup exp2.c exp2f.c and exp2l.c · 159c7655
      Szabolcs Nagy 提交于
      * old code relied on sign extension on right shift
      * exp2l ld64 wrapper was wrong
      * use scalbn instead of bithacks
      159c7655
    • S
      math: exp.c clean up · bbbf045c
      Szabolcs Nagy 提交于
      overflow and underflow was incorrect when the result was not stored.
      an optimization for the 0.5*ln2 < |x| < 1.5*ln2 domain was removed.
      did various cleanups around static constants and made the comments
      consistent with the code.
      bbbf045c
  4. 14 11月, 2012 2 次提交
  5. 13 11月, 2012 11 次提交
  6. 14 8月, 2012 2 次提交
    • R
      remove significandl · ab76321c
      Rich Felker 提交于
      this function never existed historically; since the float/double
      functions it's based on are nonstandard and deprecated, there's really
      no justification for its existence except that glibc has it. it can be
      added back if there's ever really a need...
      ab76321c
    • R
      add significand[fl] math functions · 2242bf61
      Rich Felker 提交于
      2242bf61
  7. 09 8月, 2012 1 次提交
  8. 03 7月, 2012 2 次提交
  9. 21 6月, 2012 2 次提交
    • N
      math: fix fma bug on x86 (found by Bruno Haible with gnulib) · e5fb6820
      nsz 提交于
      The long double adjustment was wrong:
      The usual check is
        mant_bits & 0x7ff == 0x400
      before doing a mant_bits++ or mant_bits-- adjustment since
      this is the only case when rounding an inexact ld80 into
      double can go wrong. (only in nearest rounding mode)
      
      After such a check the ++ and -- is ok (the mantissa will end
      in 0x401 or 0x3ff).
      
      fma is a bit different (we need to add 3 numbers with correct
      rounding: hi_xy + lo_xy + z so we should survive two roundings
      at different places without precision loss)
      
      The adjustment in fma only checks for zero low bits
        mant_bits & 0x3ff == 0
      this way the adjusted value is correct when rounded to
      double or *less* precision.
      (this is an important piece in the fma puzzle)
      
      Unfortunately in this case the -- is not a correct adjustment
      because mant_bits might underflow so further checks are needed
      and this was the source of the bug.
      e5fb6820
    • R
      support ld80 pseudo-denormal invalid bit patterns; treat them as nan · fad231b9
      Rich Felker 提交于
      this is silly, but it makes apps that read binary junk and interpret
      it as ld80 "safer", and it gets gnulib to stop replacing printf...
      fad231b9
  10. 03 6月, 2012 1 次提交
  11. 08 5月, 2012 2 次提交
  12. 07 5月, 2012 2 次提交
  13. 06 5月, 2012 1 次提交
    • N
      math: nextafter and nexttoward cleanup · 6cf865db
      nsz 提交于
      make nexttoward, nexttowardf independent of long double representation.
      fix nextafterl: it did not raise underflow flag when the result was 0.
      6cf865db
  14. 05 5月, 2012 1 次提交
    • N
      math: change the formula used for acos.s · f697d66b
      nsz 提交于
      old: 2*atan2(sqrt(1-x),sqrt(1+x))
      new: atan2(fabs(sqrt((1-x)*(1+x))),x)
      improvements:
      * all edge cases are fixed (sign of zero in downward rounding)
      * a bit faster (here a single call is about 131ns vs 162ns)
      * a bit more precise (at most 1ulp error on 1M uniform random
      samples in [0,1), the old formula gave some 2ulp errors as well)
      f697d66b
  15. 01 5月, 2012 1 次提交