Returning Inf of specific type

question

#1

I would like for a function to return Inf in some cases. However, the type of Inf should depend on the floating type of the function arguments. That is, I would like the following

function f(x::R) where {R <: Real}
  if # some condition
    return Inf
  end
end

to return Inf16 if R == Float16, Inf32 if R == Float32, Inf64 if R == Float64. However, there seem not to be a way of constructing Inf of a given type R <: Real, unlike e.g. zero. Is there a way to do this?


#2

You can write R(Inf) or convert(R, Inf).


#3

R(Inf) doesn’t work for integers. Consider restricting R to AbstractFloat

function f(x::R) where {R <: AbstractFloat}
  if # some condition
    return R(Inf)
  end
end

#4

Right, depending on what you want you may want to restrict the method or call typemax which will be a typed infinity for float types.


#5

You can also use

function f(x)
    if stuff
        return oftype(x, Inf)
    end
    ...
end

which should lead to equivalent code, but is more compact if you don’t need R.


#6

Wow, thanks a lot, all viable solutions. I marked Stefan’s as solution just because it is closest to what I was trying to do. But it’s all stuff to consider. Thanks again.