int  sample_discrete(int nvalues, float u)
                    
                    
                
            
                
                    
                    
                    
                        int  sample_discrete(float weights[], float u)
                    
                    
                
            
            
                nvalues
            
            
        
The returned integer will be uniform in the range [0,nvalues-1],
    returning 0 if u==0, and returning nvalues-1 if u==1.  The
    output will be clamped to that range in case u is out of the range
    [0,1), to reduce the risk of roundoff on u causing problems.
            
                weights
            
            
        
Relative weights, (the sum does not need to be 1), of each integer
    value in the range [0,len(weights)-1].
            
                u
            
            
        
A number between 0 and 1.
Returns an integer, based on u, either uniformly weighted from 0 to
nvalues-1, or weighted based on the weights array from 0 to
len(weights)-1.
Given uniform random u values in [0,1), the version taking nvalues
will return uniform random integers in [0,nvalues-1], and the version
taking weights will return random integers in [0,len(weights)-1], where
the probability of i is weights[i]/sum_of_weights.
| See also |