• Brian Kessler's avatar
    math: implement trignometric range reduction for huge arguments · 98521a5a
    Brian Kessler authored
    This change implements Payne-Hanek range reduction by Pi/4
    to properly calculate trigonometric functions of huge arguments.
    
    The implementation is based on:
    
    "ARGUMENT REDUCTION FOR HUGE ARGUMENTS: Good to the Last Bit"
    K. C. Ng et al, March 24, 1992
    
    The major difference with the reference is that the simulated
    multi-precision calculation of x*B is implemented using 64-bit
    integer arithmetic rather than floating point to ease extraction
    of the relevant bits of 4/Pi.
    
    The assembly implementations for 386 were removed since the trigonometric
    instructions only use a 66-bit representation of Pi internally for
    reduction.  It is not possible to use these instructions and maintain
    accuracy without a prior accurate reduction in software as recommended
    by Intel.
    
    Fixes #6794
    
    Change-Id: I31bf1369e0578891d738c5473447fe9b10560196
    Reviewed-on: https://go-review.googlesource.com/c/153059Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
    Run-TryBot: Robert Griesemer <gri@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    98521a5a
tan.go 3.61 KB