|
28 | 28 |
|
29 | 29 | Computes `hi = fl(a+b+c)` and `md = err(a+b+c), lo = err(md)`.
|
30 | 30 | """
|
31 |
| -function three_sum(a::T, b::T, c::T) where {T<:FloatWithFMA} |
32 |
| - s, t = two_sum(b, c) |
33 |
| - hi, u = two_sum(a, s) |
34 |
| - md, lo = two_sum(u, t) |
| 31 | +function three_sum(a::T,b::T,c::T) where {T<:FloatWithFMA} |
| 32 | + t0, t1 = two_sum(a, b) |
| 33 | + hi, t2 = two_sum(t0, c) |
| 34 | + md, lo = two_sum(t2, t1) |
35 | 35 | hi, md = two_hilo_sum(hi, md)
|
36 | 36 | return hi, md, lo
|
37 | 37 | end
|
38 | 38 |
|
39 |
| - |
40 | 39 | """
|
41 | 40 | four_sum(a, b, c, d)
|
42 | 41 |
|
43 | 42 | Computes `hi = fl(a+b+c+d)` and `hm = err(a+b+c+d), ml = err(hm), lo = err(ml)`.
|
44 | 43 | """
|
45 | 44 | function four_sum(a::T,b::T,c::T,d::T) where {T<:FloatWithFMA}
|
46 |
| - t0, t1 = two_sum(a , b) |
47 |
| - t0, t2 = two_sum(t0, c) |
48 |
| - hi, t3 = two_sum(t0, d) |
49 |
| - t0, t1 = two_sum(t1, t2) |
50 |
| - hm, t2 = two_sum(t0, t3) # here, t0 >= t3 |
51 |
| - ml, lo = two_sum(t1, t2) |
| 45 | + t0, t1 = two_sum(a, b) |
| 46 | + t2, t3 = two_sum(c, d) |
| 47 | + hi, t4 = two_sum(t0, t2) |
| 48 | + t5, lo = two_sum(t1, t3) |
| 49 | + hm, ml = two_sum(t4, t5) |
| 50 | + ml, lo = two_hilo_sum(ml, lo) |
| 51 | + hm, ml = two_hilo_sum(hm, ml) |
| 52 | + hi, hm = two_hilo_sum(hi,hm) |
52 | 53 | return hi, hm, ml, lo
|
53 | 54 | end
|
54 | 55 |
|
55 |
| - |
56 |
| - |
57 | 56 | """
|
58 | 57 | two_sum(a, b, c)
|
59 | 58 |
|
60 | 59 | Computes `hi = fl(a+b+c)` and `lo = err(a+b+c)`.
|
61 | 60 | """
|
62 |
| -function two_sum(a::T, b::T, c::T) where {T<:FloatWithFMA} |
63 |
| - s, t = two_sum(b, c) |
64 |
| - x, u = two_sum(a, s) |
65 |
| - y = u + t |
66 |
| - x, y = two_sum(x, y) |
67 |
| - return x, y |
| 61 | +function two_sum(a::T,b::T,c::T) where {T<:FloatWithFMA} |
| 62 | + t0, t1 = two_sum(a, b) |
| 63 | + hi, t2 = two_sum(t0, c) |
| 64 | + lo = t2 + t1 |
| 65 | + hi, lo = two_hilo_sum(hi, lo) |
| 66 | + return hi, lo |
68 | 67 | end
|
69 | 68 |
|
70 | 69 | """
|
|
0 commit comments