From 82ea33ea2ebeefdae7e41ecd6cf5dfa42a613f45 Mon Sep 17 00:00:00 2001 From: chriswaudby Date: Sun, 9 Jul 2023 16:50:55 +0100 Subject: [PATCH] Add rtol and norm to implement isapprox --- README.md | 1 + src/base.jl | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/README.md b/README.md index 48ce3bf..0650278 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ Multicomplex numbers are a generalisation of complex numbers, recursively define ## TODO * FFT +* The comparison `exp(0im1) == 1.` throws a TypeError ## useful links (notes to self for development) diff --git a/src/base.jl b/src/base.jl index 5d3533c..7d7487d 100644 --- a/src/base.jl +++ b/src/base.jl @@ -119,6 +119,20 @@ Base.widen(::Type{Multicomplex{T,N,C}}) where {T,N,C} = Multicomplex{widen(T),N, Base.float(::Type{Multicomplex{T,N,C}}) where {T<:AbstractFloat,N,C} = Multicomplex{T,N,C} Base.float(::Type{Multicomplex{T,N,C}}) where {T,N,C} = Multicomplex{float(T),N,C} +Base.rtoldefault(::Type{Multicomplex{T,N,C}}) where {T,N,C} = Base.rtoldefault(T) +Base.rtoldefault(::Multicomplex{T,N,C}) where {T,N,C} = Base.rtoldefault(T) +function Base.rtoldefault(x::Union{T,Type{T}}, y::Union{S,Type{S}}, atol::Real) where {T<:Multicomplex,S<:Number} + rtol = max(Base.rtoldefault(T),Base.rtoldefault(real(S))) + return atol > 0 ? zero(rtol) : rtol +end +function Base.rtoldefault(x::Union{T,Type{T}}, y::Union{S,Type{S}}, atol::Real) where {T<:Number,S<:Multicomplex} + rtol = max(Base.rtoldefault(real(T)),Base.rtoldefault(S)) + return atol > 0 ? zero(rtol) : rtol +end +function Base.rtoldefault(x::Union{T,Type{T}}, y::Union{S,Type{S}}, atol::Real) where {T<:Multicomplex,S<:Multicomplex} + rtol = max(Base.rtoldefault(T),Base.rtoldefault(S)) + return atol > 0 ? zero(rtol) : rtol +end ############## # Components # @@ -158,6 +172,10 @@ Base.iszero(m::Multicomplex) = all(iszero.(m.value)) Base.isone(m::Multicomplex) = isreal(m) && isone(m.value[1]) +"""Norm is sum of squares of components""" +LinearAlgebra.norm(m::Multicomplex) = norm(m.value) + + ########## # Traits # ##########