@@ -1025,23 +1025,41 @@ Base.rem(n::AbstractPolynomial, d::AbstractPolynomial) = divrem(n, d)[2]
1025
1025
#=
1026
1026
Comparisons =#
1027
1027
Base. isequal (p1:: P , p2:: P ) where {P <: AbstractPolynomial } = hash (p1) == hash (p2)
1028
- function Base.:(== )(p1:: AbstractPolynomial , p2:: AbstractPolynomial )
1029
- check_same_variable (p1,p2) || return false
1028
+ function Base.:(== )(p1:: P , p2:: P ) where {P <: AbstractPolynomial }
1030
1029
iszero (p1) && iszero (p2) && return true
1031
1030
eachindex (p1) == eachindex (p2) || return false
1032
1031
# coeffs(p1) == coeffs(p2), but non-allocating
1033
1032
p1val = (p1[i] for i in eachindex (p1))
1034
1033
p2val = (p2[i] for i in eachindex (p2))
1035
1034
all (((a,b),) -> a == b, zip (p1val, p2val))
1036
1035
end
1036
+ function Base.:(== )(p1:: AbstractPolynomial , p2:: AbstractPolynomial )
1037
+ if isconstant (p1)
1038
+ isconstant (p2) && return constantterm (p1) == constantterm (p2)
1039
+ return false
1040
+ elseif isconstant (p2)
1041
+ return false # p1 is not constant
1042
+ end
1043
+ check_same_variable (p1, p2) || return false
1044
+ == (promote (p1,p2)... )
1045
+ end
1037
1046
Base.:(== )(p:: AbstractPolynomial , n:: Number ) = degree (p) <= 0 && constantterm (p) == n
1038
1047
Base.:(== )(n:: Number , p:: AbstractPolynomial ) = p == n
1039
1048
1049
+ function Base. isapprox (p1:: AbstractPolynomial , p2:: AbstractPolynomial ; kwargs... )
1050
+ if isconstant (p1)
1051
+ isconstant (p2) && return constantterm (p1) == constantterm (p2)
1052
+ return false
1053
+ elseif isconstant (p2)
1054
+ return false
1055
+ end
1056
+ isapprox (promote (p1, p2)... ; kwargs... )
1057
+ end
1058
+
1040
1059
function Base. isapprox (p1:: AbstractPolynomial{T,X} ,
1041
- p2:: AbstractPolynomial{S,Y} ;
1042
- rtol:: Real = (Base. rtoldefault (T, S, 0 )),
1043
- atol:: Real = 0 ,) where {T,X,S,Y}
1044
- assert_same_variable (p1, p2)
1060
+ p2:: AbstractPolynomial{T,X} ;
1061
+ rtol:: Real = (Base. rtoldefault (T,T,0 )),
1062
+ atol:: Real = 0 ,) where {T,X}
1045
1063
(hasnan (p1) || hasnan (p2)) && return false # NaN poisons comparisons
1046
1064
# copy over from abstractarray.jl
1047
1065
Δ = norm (p1- p2)
0 commit comments