diff --git a/Project.toml b/Project.toml index ce5ab327..2b22f02f 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "FastTransforms" uuid = "057dd010-8810-581a-b7be-e3fc3b93f78c" -version = "0.15.2" +version = "0.15.3" [deps] AbstractFFTs = "621f4979-c628-5d54-868e-fcf4e3e8185c" diff --git a/src/clenshaw.jl b/src/clenshaw.jl index a3e32452..24a1ee59 100644 --- a/src/clenshaw.jl +++ b/src/clenshaw.jl @@ -29,7 +29,14 @@ function _forwardrecurrence!(v::AbstractVector, A::AbstractVector, B::AbstractVe v[1] = p0 N == 1 && return v v[2] = p1 - @inbounds for n = 2:N-1 + _forwardrecurrence!(v, A, B, C, x, 2:N) +end + +function _forwardrecurrence!(v::AbstractVector, A::AbstractVector, B::AbstractVector, C::AbstractVector, x, kr::AbstractUnitRange) + n₀, N = first(kr), last(kr) + @boundscheck N > length(v) && throw(BoundsError(v, N)) + p0, p1 = v[n₀-1], v[n₀] + @inbounds for n = n₀:N-1 p1,p0 = _forwardrecurrence_next(n, A, B, C, x, p0, p1),p1 v[n+1] = p1 end @@ -38,6 +45,7 @@ end + forwardrecurrence(N::Integer, A::AbstractVector, B::AbstractVector, C::AbstractVector, x) = forwardrecurrence!(Vector{promote_type(eltype(A),eltype(B),eltype(C),typeof(x))}(undef, N), A, B, C, x)