Returning Inf of specific type

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?

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

1 Like

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
2 Likes

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.

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.

3 Likes

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.