2015-03-12 3 views
3

В Джулии, у меня есть функция, как это:типа стабильных функции Джулии для общего распределения при работе с точечными входами плавающих

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.0 и 1.0: Float64, а x/c может быть Float32 или Float16? Возможно, я мог бы использовать параметры типа, например. T<:FloatingPoint, а затем введите x::T и c::T, а затем используйте 0.0::T и 1.0::T в теле функции, чтобы убедиться, что она устойчива к типу?

Любое руководство здесь будет оценено.

+2

32 битных машины поддерживают 'Float64' штраф. Разделение 32/64 бит применяется только к целым числам. –

+0

@MrAlpha Спасибо, это полезная информация, –

ответ

11

В one и zero функций полезны здесь:

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 

 Смежные вопросы

  • Нет связанных вопросов^_^