Discussing some choices made so far
cjdoris opened this issue · comments
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
NotANumber
really 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 typeT
thatT(x::Number)
is the same asconvert(T, x)
. There should be constructors private to the module calledrealinffromsignbit
or something. - Why is there checked arithmetic when this is for integers, and infinity is not an integer?
- Why is
fld(x, Infinity()) == -1
whenx<0
? I am guessing that you are definingfld(x, Infinity())
as the limit asy
gets 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
ComplexInfinity
is not ordered, why aremod
,div
,fld
,isless
,<
,min
, etc. defined? They aren't defined forComplex
.
- Is
NotANumber
really 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.