Skip to content

Commit d72dd38

Browse files
Improve evaluation of LaurentPolynomial (#292)
Use `ntuple` instead of `NTuple` for constructing the coefficient tuples passed to `evalpoly`. This compiles much faster on Julia 1.0 (especially for high-degree polynomials) and is also faster to evaluate even on current Julia.
1 parent f2c4a0e commit d72dd38

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

src/polynomials/LaurentPolynomial.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -419,13 +419,13 @@ function (p::LaurentPolynomial{T})(x::S) where {T,S}
419419
m,n = (extrema degreerange)(p)
420420
m == n == 0 && return p[0] * _one(S)
421421
if m >= 0
422-
evalpoly(x, NTuple{n+1,T}(p[i] for i in 0:n))
422+
evalpoly(x, ntuple(i -> p[i-1], n+1)) # NTuple{n+1}(p[i] for i in 0:n)
423423
elseif n <= 0
424-
evalpoly(inv(x), NTuple{-m+1,T}(p[i] for i in 0:-1:m))
424+
evalpoly(inv(x), ntuple(i -> p[-i+1], -m+1)) # NTuple{-m+1}(p[i] for i in 0:-1:m)
425425
else
426426
# eval pl(x) = a_mx^m + ...+ a_0 at 1/x; pr(x) = a_0 + a_1x + ... + a_nx^n at x; subtract a_0
427-
l = evalpoly(inv(x), NTuple{-m+1,T}(p[i] for i in 0:-1:m))
428-
r = evalpoly(x, NTuple{n+1,T}(p[i] for i in 0:n))
427+
l = evalpoly(inv(x), ntuple(i -> p[-i+1], -m+1)) # NTuple{-m+1}(p[i] for i in 0:-1:m)
428+
r = evalpoly(x, ntuple(i -> p[i-1], n+1)) # NTuple{n+1}(p[i] for i in 0:n)
429429
mid = p[0]
430430
l + r - mid
431431
end

0 commit comments

Comments
 (0)