How do I get the infinity corresponding to a type? Is there an analog of zero(T)
? Something like:
inf(Float16)
Here is how I would define it myself:
function inf(::Type{T})::T where T
one(T) / zero(T)
end
Is there a better way?
How do I get the infinity corresponding to a type? Is there an analog of zero(T)
? Something like:
inf(Float16)
Here is how I would define it myself:
function inf(::Type{T})::T where T
one(T) / zero(T)
end
Is there a better way?
T(Inf)
. For example, Float16(Inf)
.
If we can do T(0)
, what’s the point of zero(T)
?
For any subtype of Number
, zero(T)
is just a shorthand for convert(T, 0)
. See: https://github.com/JuliaLang/julia/blob/6a23e234e6cc5b4361b5f88614a9ed423dc2c12a/base/number.jl#L238
And for any type T, if you haven’t defined a constructor T(x)
, then it will also fall back to convert(T, x)
. See: https://github.com/JuliaLang/julia/blob/6a23e234e6cc5b4361b5f88614a9ed423dc2c12a/base/sysimg.jl#L114
So zero(T)
is strictly equivalent to T(0)
. Then why do we need zero(...)
?
Because zero
works for types that are not numbers. e.g. matrices. Any type supporting +
should also define a zero
function to return the additive identity.
In contrast, Inf
is pretty much only meaningful for numeric types, specifically floating-point types.