Infinities.jl
Infinities.jl copied to clipboard
Discussing some choices made so far
Thanks for starting this package. I've been getting used to it before adding my stuff.
Here are a few things I've noticed in the implementation so far that I think need to be justified or addressed:
- Is
NotANumberreally necessary? Why not just raise an exception? - I don't think we should have constructors
RealInfinity(signbit::Bool)andComplexInfinity(angle::Real): the convention in Julia Base is that for a numeric typeTthatT(x::Number)is the same asconvert(T, x). There should be constructors private to the module calledrealinffromsignbitor something. - Why is there checked arithmetic when this is for integers, and infinity is not an integer?
- Why is
fld(x, Infinity()) == -1whenx<0? I am guessing that you are definingfld(x, Infinity())as the limit asygets big offld(x, y), but an equally good definition is simply that it isfloor(x / Infinity()) == 0. The latter definition is the one in the Julia documentation, and arguably the one people would expect. - Given
ComplexInfinityis not ordered, why aremod,div,fld,isless,<,min, etc. defined? They aren't defined forComplex.
- Is
NotANumberreally necessary? Why not just raise an exception?
For consistency with Inf. Functions do not expect 0/Inf to throw an exception so if 0/∞ did it would break code.
- don't think we should have constructors
RealInfinity(signbit::Bool)...
Agreed.
- Why is there checked arithmetic when this is for integers, and infinity is not an integer?
You are right, this should be for InfiniteCardinal{0} (the code was copied from InfiniteArrays.jl where Infinity <: Integer)
- I am guessing that you are defining
fld(x, Infinity())as the limit…
Yes. This was probably also meant for InfiniteCardinal{0} where probably the behaviour is required for some part of the array code. Once I get InfiniteArrays.jl depending on this package we can try changing things to see if it breaks it.
- Given ComplexInfinity is not ordered...
Note its only defined for ComplexInfinity{Bool} which we know is real, but I agree its confusing. This was copied over from OrientedInfinity{Bool} which was less controversial, but I believe predates the creation of RealInfinity, so in the past -∞ was OrientedInfinity(true). So this code can likely be deleted. It might impact ApproxFun.jl so again lets keep it for now and can try removing it once the dependencies are added.