@@ -561,26 +561,28 @@ Base.:(==)(n::Number, p::AbstractPolynomial) = p == n
561561function Base. isapprox (p1:: AbstractPolynomial{T} ,
562562 p2:: AbstractPolynomial{S} ;
563563 rtol:: Real = (Base. rtoldefault (T, S, 0 )),
564- atol:: Real = 0 ,) where {T,S}
564+ atol:: Real = 0 ,) where {T,S}
565+
565566 p1, p2 = promote (p1, p2)
566567 check_same_variable (p1, p2) || error (" p1 and p2 must have same var" )
567- p1t = truncate (p1; rtol = rtol, atol = atol)
568- p2t = truncate (p2; rtol = rtol, atol = atol)
569- if length (p1t) ≠ length (p2t)
570- return false
568+
569+ # copy over from abstractarray.jl
570+ Δ = norm (p1- p2)
571+ if isfinite (Δ)
572+ return Δ <= max (atol, rtol* max (norm (p1), norm (p2)))
573+ else
574+ for i in 0 : max (degree (p1), degree (p2))
575+ isapprox (p1[i], p2[i]; rtol= rtol, atol= atol) || return false
576+ end
577+ return true
571578 end
572- isapprox (coeffs (p1t), coeffs (p2t), rtol = rtol, atol = atol)
573579end
574580
575- function Base. isapprox (p1:: AbstractPolynomial{T} ,
581+ function Base. isapprox (p1:: P ,
576582 n:: S ;
577583 rtol:: Real = (Base. rtoldefault (T, S, 0 )),
578- atol:: Real = 0 ,) where {T,S}
579- p1t = truncate (p1, rtol = rtol, atol = atol)
580- if length (p1t) != 1
581- return false
582- end
583- isapprox (coeffs (p1t), [n], rtol = rtol, atol = atol)
584+ atol:: Real = 0 ,) where {T,S, P<: AbstractPolynomial{T} }
585+ return isapprox (p1, ⟒ (P){T}(n,p1. var))
584586end
585587
586588Base. isapprox (n:: S ,
0 commit comments