|
| 1 | +## Edited by Michael Kline, MIT License |
| 2 | +## This work was supported in part by the U.S. Department of Energy, Office of Science, Office of Workforce Development for Teachers and Scientists (WDTS) under the Science Undergraduate Laboratory Internships Program (SULI) program at Oak Ridge National Laboratory, administered by the Oak Ridge Institute for Science and Education. |
| 3 | + |
1 | 4 | function mod2pi(x::DoubleFloat{T}) where {T<:IEEEFloat}
|
2 | 5 | s = signbit(x)
|
3 |
| - if s |
4 |
| - x = -x |
5 |
| - end |
6 |
| - x < pi2o1(DoubleFloat{T}) && return x |
7 |
| - x < pi4o1(DoubleFloat{T}) && return mod2pi(x - pi2o1(DoubleFloat{T})) |
8 |
| - himdlo = mul323(inv_pi_2o1_t64, HILO(x)) |
| 6 | + c = s ? -1 : 1 |
| 7 | + y = c * x |
| 8 | + y < pi2o1(DoubleFloat{T}) && return s ? pi2o1(DoubleFloat{T}) - y : y |
| 9 | + y < pi4o1(DoubleFloat{T}) && return mod2pi(x - c*pi2o1(DoubleFloat{T})) |
| 10 | + himdlo = mul323(inv_pi_2o1_t64, HILO(y)) |
9 | 11 | hi, md, lo = three_sum([modf(x)[1] for x in himdlo]...,)
|
10 | 12 | if hi >= 1.0
|
11 | 13 | hi = hi - 1.0
|
|
23 | 25 |
|
24 | 26 | function mod1pi(x::DoubleFloat{T}) where {T<:IEEEFloat}
|
25 | 27 | s = signbit(x)
|
26 |
| - if s |
27 |
| - x = -x |
28 |
| - end |
29 |
| - x < pi1o1(DoubleFloat{T}) && return x |
30 |
| - x < pi2o1(DoubleFloat{T}) && return mod1pi(x - pi1o1(DoubleFloat{T})) |
31 |
| - himdlo = mul323(inv_pi_1o1_t64, HILO(x)) |
| 28 | + c = s ? -1 : 1 |
| 29 | + y = c * x |
| 30 | + x < pi1o1(DoubleFloat{T}) && return s ? pi1o1(DoubleFloat{T}) - y : y |
| 31 | + x < pi2o1(DoubleFloat{T}) && return mod1pi(x - c*pi1o1(DoubleFloat{T})) |
| 32 | + himdlo = mul323(inv_pi_1o1_t64, HILO(y)) |
32 | 33 | hi, md, lo = three_sum([modf(x)[1] for x in himdlo]...,)
|
33 | 34 | if hi >= 1.0
|
34 | 35 | hi = hi - 1.0
|
|
46 | 47 |
|
47 | 48 | function modhalfpi(x::DoubleFloat{T}) where {T<:IEEEFloat}
|
48 | 49 | s = signbit(x)
|
49 |
| - if s |
50 |
| - x = -x |
51 |
| - end |
52 |
| - x < pi1o2(DoubleFloat{T}) && return x |
53 |
| - x < pi1o1(DoubleFloat{T}) && return modhalfpi(x - pi1o2(DoubleFloat{T})) |
54 |
| - himdlo = mul323(inv_pi_1o2_t64, HILO(x)) |
| 50 | + c = s ? -1 : 1 |
| 51 | + y = c * x |
| 52 | + x < pi1o2(DoubleFloat{T}) && return s ? pi1o2(DoubleFloat{T}) - y : y |
| 53 | + x < pi1o1(DoubleFloat{T}) && return modhalfpi(x - c*pi1o2(DoubleFloat{T})) |
| 54 | + himdlo = mul323(inv_pi_1o2_t64, HILO(y)) |
55 | 55 | hi, md, lo = three_sum([modf(x)[1] for x in himdlo]...,)
|
56 | 56 | if hi >= 1.0
|
57 | 57 | hi = hi - 1.0
|
|
69 | 69 |
|
70 | 70 | function modqrtrpi(x::DoubleFloat{T}) where {T<:IEEEFloat}
|
71 | 71 | s = signbit(x)
|
72 |
| - if s |
73 |
| - x = -x |
74 |
| - end |
75 |
| - x < pi1o4(DoubleFloat{T}) && return x |
76 |
| - x < pi1o2(DoubleFloat{T}) && return modqrtrpi(x - pi1o4(DoubleFloat{T})) |
77 |
| - himdlo = mul323(inv_pi_1o4_t64, HILO(x)) |
| 72 | + c = s ? -1 : 1 |
| 73 | + y = c * x |
| 74 | + x < pi1o4(DoubleFloat{T}) && return s ? pi1o4(DoubleFloat{T}) - y : y |
| 75 | + x < pi1o2(DoubleFloat{T}) && return modqrtrpi(x - c*pi1o4(DoubleFloat{T})) |
| 76 | + himdlo = mul323(inv_pi_1o4_t64, HILO(y)) |
78 | 77 | hi, md, lo = three_sum([modf(x)[1] for x in himdlo]...,)
|
79 | 78 | if hi >= 1.0
|
80 | 79 | hi = hi - 1.0
|
|
132 | 131 | # within (pi/2) quadrant determine nearest multiple of pi/16
|
133 | 132 |
|
134 | 133 | function whichquadrant(x::DoubleFloat{T}) where {T<:IEEEFloat}
|
135 |
| - x = negpi_pospi(x) |
| 134 | + x = negpi_pospi(x) |
136 | 135 | if signbit(x) # quadrant -2 or -1
|
137 | 136 | quadrant = -x < DoubleFloat{T}(pi)/2 ? -2 : -1
|
138 | 137 | else # quadrant 1 or 2
|
|
0 commit comments