Ha, you guys are totally right.

Sorry about that Tim, I was wrong there.

Thanks for clearing it up, John.


On Monday, June 30, 2014 12:56:10 PM UTC-4, John Myles White wrote:
>
> 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] <javascript:>> 
> 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