Skip to content

Commit 1efa6a1

Browse files
committed
WIP
1 parent 75944ec commit 1efa6a1

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

src/polynomials/Polynomial.jl

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,14 +169,28 @@ function Base.:+(p1::Polynomial, p2::Polynomial)
169169
return Polynomial(c, p1.var)
170170
end
171171

172+
173+
function Base.:+(p::Polynomial{T}, c::S) where {T,S<:Number}
174+
U = promote_type(T, S)
175+
p2 = U == S ? copy(p) : convert(Polynomial{U}, p)
176+
p2[0] += c
177+
return p2
178+
end
179+
180+
172181
function Base.:*(p1::Polynomial{T}, p2::Polynomial{S}) where {T,S}
173182
p1.var != p2.var && error("Polynomials must have same variable")
174183
n = length(p1) - 1
175184
m = length(p2) - 1
176185
R = promote_type(T, S)
177186
c = zeros(R, m + n + 1)
178-
for i in 0:n, j in 0:m
179-
c[i + j + 1] += p1[i] * p2[j]
187+
i = j = 0
188+
while i <= n
189+
while j <= m
190+
c[i + j + 1] += p1[i] * p2[j]
191+
j +=1
192+
end
193+
i += 1
180194
end
181195
return Polynomial(c, p1.var)
182196
end
@@ -194,10 +208,14 @@ function Base.divrem(num::Polynomial{T}, den::Polynomial{S}) where {T,S}
194208
end
195209
q_coeff = zeros(R, deg)
196210
r_coeff = R.(num[0:n])
197-
@inbounds for i in n:-1:m
211+
i = n
212+
@inbounds while i >= m
213+
i -= 1
198214
q = r_coeff[i + 1] / den[m]
199215
q_coeff[i - m + 1] = q
200-
@inbounds for j in 0:m
216+
j = 0
217+
@inbounds while j <= m
218+
j += 1
201219
elem = den[j] * q
202220
r_coeff[i - m + j + 1] -= elem
203221
end

0 commit comments

Comments
 (0)