Hey Spencer,

A function is defined to be "type stable" if the return types depend only on 
the input types.

 -- John

On Jun 30, 2014, at 9:51 AM, Tim Holy <[email protected]> wrote:

> In your definition I think you meant "type stability," not "type 
> instability." 
> To be completely explicit, a function is type-stable if you can calculate the 
> return type(s) of all outputs from the types of the inputs. If you have to 
> look at the actual values of the inputs, it's not type-stable.
> 
> --Tim
> 
> On Monday, June 30, 2014 09:17:45 AM Spencer Lyon wrote:
>> Does this function suffer from type instability?
>> 
>> function bellman_operator{T <: FloatingPoint}(g::GrowthModel, w::Vector{T},
>>                                              compute_policy::Bool=false)
>>    # === Apply linear interpolation to w === #
>>    Aw = CoordInterpGrid(g.grid, w, BCnan, InterpLinear)
>> 
>>    if compute_policy
>>        σ = zeros(w)
>>    end
>> 
>>    # === set Tw[i] equal to max_c { u(c) + beta w(f(k_i) - c)} === #
>>    Tw = zeros(w)
>>    for (i, k) in enumerate(g.grid)
>>        objective(c) = - g.u(c) - g.β * Aw[g.f(k) - c]
>>        res = optimize(objective, 1e-6, g.f(k))
>>        c_star = res.minimum
>>        if compute_policy
>>            σ[i] = c_star
>>        end
>> 
>>        Tw[i] = - objective(c_star)
>>    end
>> 
>>    if compute_policy
>>        return Tw, σ
>>    else
>>        return Tw
>>    end
>> end
>> 
>> As far as I understand (which could very well be the source of my
>> uncertainty — can anyone correct this definition?), the definition of type
>> instability is that return types depend on the types of input types. In
>> this case the return type doesn’t depend on the input type, but it does
>> depend on the *value* of the argument compute_policy (return type is either
>> Vector{T} or (Vector{T}, Vector{T})). I am a little unsure because given
>> the *value* of compute_policy, the return type is unambiguous.
>> ​
> 

Reply via email to