@@ -4,12 +4,13 @@ export ultraconversion!,ultraint!
4
4
5
5
# diff from T -> U
6
6
function ultradiff (v:: AbstractVector{T} ) where T<: Number
7
+ Base. require_one_based_indexing (v)
7
8
# polynomial is p(x) = sum ( v[i] * x^(i-1) )
8
9
if length (v)≤ 1
9
10
w = zeros (T,1 )
10
11
else
11
12
w = Array {T} (undef, length (v)- 1 )
12
- for k= 1 : length (v) - 1
13
+ for k in eachindex (w)
13
14
@inbounds w[k] = k* v[k+ 1 ]
14
15
end
15
16
end
21
22
22
23
# TODO : what about missing truncation?
23
24
function ultraint! (v:: AbstractMatrix{T} ) where T<: Number
24
- for k = size (v,1 ) : - 1 : 2
25
- for j = 1 : size (v,2 )
25
+ for j in axes (v,2 )
26
+ for k in reverse ( axes (v, 1 )[ firstindex (v,1 ) + 1 : end ] )
26
27
@inbounds v[k,j] = v[k- 1 ,j]/ (k- 1 )
27
28
end
28
29
end
29
30
30
- @simd for j= 1 : size (v)[ 2 ]
31
+ @simd for j in axes (v, 2 )
31
32
@inbounds v[1 ,j] = zero (T)
32
33
end
33
34
36
37
37
38
function ultraint! (v:: AbstractVector{T} ) where T<: Number
38
39
resize! (v,length (v)+ 1 )
39
- @simd for k= length (v) : - 1 : 2
40
+ @simd for k in reverse ( eachindex (v)[ firstindex (v) + 1 : end ])
40
41
@inbounds v[k] = v[k- 1 ]/ (k- 1 )
41
42
end
42
43
43
- @inbounds v[1 ] = zero (T)
44
+ @inbounds v[firstindex (v) ] = zero (T)
44
45
45
46
v
46
47
end
47
48
48
49
# Convert from U -> T
49
50
function ultraiconversion (v:: AbstractVector{T} ) where T<: Number
51
+ Base. require_one_based_indexing (v)
50
52
n = length (v)
51
53
w = Array {T} (undef, n)
52
54
71
73
72
74
73
75
# Convert T -> U
74
- function ultraconversion (v:: AbstractVector{T} ) where T<: Number
75
- n = length (v)
76
- w = Array {T} (undef, n)
77
-
78
- if n == 1
79
- w[1 ] = v[1 ]
80
- elseif n == 2
81
- w[1 ] = v[1 ]
82
- w[2 ] = .5 v[2 ]
83
- elseif n ≥ 3
84
- w[1 ] = v[1 ] - .5 v[3 ]
85
-
86
- @simd for j= 2 : n- 2
87
- @inbounds w[j] = .5 * (v[j] - v[j+ 2 ])
88
- end
89
-
90
- w[n- 1 ] = .5 v[n- 1 ]
91
- w[n] = .5 v[n]
92
- end
93
-
94
- w
76
+ function ultraconversion (v:: AbstractVector{<:Number} )
77
+ ultraconversion! (float .(v))
95
78
end
96
79
97
- function ultraconversion! (v:: AbstractVector{T} ) where T<: Number
80
+ function ultraconversion! (v:: AbstractVector{<:Number} )
81
+ Base. require_one_based_indexing (v)
98
82
n = length (v) # number of coefficients
99
83
100
- if n ≤ 1
101
- # do nothing
102
- elseif n == 2
84
+ if n == 2
103
85
@inbounds v[2 ] /= 2
104
- else
86
+ elseif n > 2
105
87
@inbounds v[1 ] -= v[3 ]/ 2
106
88
107
89
for j= 2 : n- 2
@@ -115,6 +97,7 @@ function ultraconversion!(v::AbstractVector{T}) where T<:Number
115
97
end
116
98
117
99
function ultraconversion! (v:: AbstractMatrix{T} ) where T<: Number
100
+ Base. require_one_based_indexing (v)
118
101
n = size (v)[1 ] # number of coefficients
119
102
m = size (v)[2 ] # number of funs
120
103
0 commit comments