]> Cypherpunks repositories - gostls13.git/commit
math: implement trignometric range reduction for huge arguments
authorBrian Kessler <brian.m.kessler@gmail.com>
Thu, 6 Sep 2018 18:06:45 +0000 (12:06 -0600)
committerRobert Griesemer <gri@golang.org>
Thu, 13 Dec 2018 06:01:42 +0000 (06:01 +0000)
commit98521a5a8f464d90898f7324171d9a78951e7342
tree7bad80af703406ea8917c214f99ff545fddc333d
parenta728b0ba7cf6316e0c2e79f8d725654a40d62081
math: implement trignometric range reduction for huge arguments

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/153059
Reviewed-by: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
12 files changed:
src/cmd/go/go_test.go
src/go/build/deps_test.go
src/math/all_test.go
src/math/export_test.go
src/math/sin.go
src/math/sin_386.s
src/math/sincos.go
src/math/sincos_386.go [deleted file]
src/math/sincos_386.s [deleted file]
src/math/tan.go
src/math/tan_386.s
src/math/trig_reduce.go [new file with mode: 0644]