在使用浮点输入时,在Julia中键入稳定函数以进行一般分布

时间:2015-03-12 01:40:31

标签: types floating-point julia type-stability

在朱莉娅,我有这样的功能:

function f(x::Float64, c::Float64)
    if x <= 0
        return(0.0)
    elseif x <= c
        return(x / c)
    else
        return(1.0)
    end
end

该功能类型稳定,因此可以快速运行。但是,我希望将该函数包含在一个包中以进行常规分发,包括32位计算机。这里的最佳做法是什么?我应该为Float32编写另一个版本的函数(如果我有很多这样的函数,这会很烦人)吗?我可以使用FloatingPoint作为输入类型吗?如果我这样做,我如何确保函数保持类型稳定,因为0.01.0Float64,而x / c可能是Float32Float16?也许我可以使用类型参数,例如T<:FloatingPoint然后让x::Tc::T,然后在函数体中使用0.0::T1.0::T以确保它是类型稳定的?

这里的任何指导都将不胜感激。

1 个答案:

答案 0 :(得分:11)

onezero函数在这里非常有用:

function f(x, c)
    if x <= 0
        return zero(x)
    elseif x <= c
        return x/c
    else
        return one(x)
    end
end

这个版本对输入类型有点严格:

function f{T<:FloatingPoint}(x::T, c::T)
    if x <= 0
        return zero(T)
    elseif x <= c
        return x/c
    else
        return one(T)
    end
end