Skip to content

Commit 4627e9b

Browse files
committed
WIP
1 parent 1efa6a1 commit 4627e9b

File tree

1 file changed

+34
-2
lines changed

1 file changed

+34
-2
lines changed

src/polynomials/Polynomial.jl

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,15 +187,47 @@ function Base.:*(p1::Polynomial{T}, p2::Polynomial{S}) where {T,S}
187187
i = j = 0
188188
while i <= n
189189
while j <= m
190-
c[i + j + 1] += p1[i] * p2[j]
190+
@inbounds c[i + j + 1] += p1[i] * p2[j]
191191
j +=1
192192
end
193193
i += 1
194194
end
195195
return Polynomial(c, p1.var)
196196
end
197197

198-
function Base.divrem(num::Polynomial{T}, den::Polynomial{S}) where {T,S}
198+
199+
function divrem(num::Polynomial{T}, den::Polynomial{S}) where {T, S}
200+
if num.var != den.var
201+
error("Polynomials must have same variable")
202+
end
203+
m = length(den)-1
204+
if m == 0 && den[0] == 0
205+
throw(DivideError())
206+
end
207+
R = typeof(one(T)/one(S))
208+
n = length(num)-1
209+
deg = n-m+1
210+
if deg <= 0
211+
return convert(Poly{R}, zero(num)), convert(Polynomial{R}, num)
212+
end
213+
214+
aQ = zeros(R, deg)
215+
aR = R[ num.a[i] for i = 1:n+1 ]
216+
for i = n:-1:m
217+
quot = aR[i+1] / den[m]
218+
aQ[i-m+1] = quot
219+
for j = 0:m
220+
elem = den[j]*quot
221+
aR[i-(m-j)+1] -= elem
222+
end
223+
end
224+
pQ = Poly(aQ, num.var)
225+
pR = Poly(aR, num.var)
226+
227+
return pQ, pR
228+
end
229+
230+
function Cdivrem(num::Polynomial{T}, den::Polynomial{S}) where {T,S}
199231
num.var != den.var && error("Polynomials must have same variable")
200232
n = length(num) - 1
201233
m = length(den) - 1

0 commit comments

Comments
 (0)