1. This solution is much faster on re-invocation than the one without the persistent num_ones variable. Unless of course it is performed on a much larger (than num_ones) array of 32-bit integer.
2. It is essential to have the statement
x= double(x);
The reason for this is that the floor() function has a problem with precision. If can fail with 32-bit integer that are close to 2^32.
For instance, consider this Matlab code and system response:
>> p=uint32(4294946031)
p =
uint32
4294946031
>> floor(p/65536)
ans =
uint32
65536
10138 Solvers
Which values occur exactly three times?
3839 Solvers
Construct an index vector from two input vectors in vectorized fashion
179 Solvers
Determine if input is a Narcissistic number
122 Solvers
222 Solvers
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!