@@ -4,7 +4,7 @@ using Base.Math: sin_kernel, cos_kernel, sincos_kernel, rem_pio2_kernel, DoubleF
4
4
computes sin(sum(xs)) where xs are sorted by absolute value
5
5
Doing this is much more accurate than the naive sin(sum(xs))
6
6
"""
7
- function sin_sum (xs:: Vararg{T} ):: T where T<: Base.IEEEFloat
7
+ function sin_sum (xs:: Vararg{T, N } ):: T where { T<: Base.IEEEFloat , N}
8
8
n, y = rem_pio2_sum (xs... )
9
9
n &= 3
10
10
if n == 0
22
22
computes sincos(sum(xs)) where xs are sorted by absolute value
23
23
Doing this is much more accurate than the naive sincos(sum(xs))
24
24
"""
25
- function sincos_sum (xs:: Vararg{T} ):: T where T<: Base.IEEEFloat
25
+ function sincos_sum (xs:: Vararg{T, N } ):: T where { T<: Base.IEEEFloat , N}
26
26
n, y = rem_pio2_sum (xs... )
27
27
n &= 3
28
28
si, co = sincos_kernel (y)
@@ -37,7 +37,7 @@ function sincos_sum(xs::Vararg{T})::T where T<:Base.IEEEFloat
37
37
end
38
38
end
39
39
40
- function rem_pio2_sum (xs:: Vararg{Float64} )
40
+ function rem_pio2_sum (xs:: Vararg{Float64, N} ) where N
41
41
n = 0
42
42
hi, lo = 0.0 , 0.0
43
43
for x in xs
@@ -65,7 +65,7 @@ function rem_pio2_sum(xs::Vararg{Float64})
65
65
return n, DoubleFloat64 (hi, lo)
66
66
end
67
67
68
- function rem_pio2_sum (xs:: Vararg{Float32} )
68
+ function rem_pio2_sum (xs:: Vararg{Float32, N} ) where N
69
69
y = 0.0
70
70
n = 0
71
71
# The minimum cosine or sine of any Float32 that gets reduced is 1.6e-9
@@ -85,7 +85,7 @@ function rem_pio2_sum(xs::Vararg{Float32})
85
85
return n + n_i, DoubleFloat32 (y. hi)
86
86
end
87
87
88
- function rem_pio2_sum (xs:: Vararg{Float16} )
88
+ function rem_pio2_sum (xs:: Vararg{Float16, N} ) where N
89
89
y = sum (Float64, xs) # Float16 can be losslessly accumulated in Float64
90
90
n, y = rem_pio2_kernel (y)
91
91
return n, DoubleFloat32 (y. hi)
0 commit comments