In the C++ standard libraries I found only a floating point log method. Now I use log to find the level of an index in a binary tree ( `floor(2log(index))`

).

Code (C++):

```
int targetlevel = int(log(index)/log(2));
```

I am afraid that for some of the edge elements (the elements with value 2^n) log will return n-1.999999999999 instead of n.0. Is this fear correct? How can I modify my statement so that it always will return a correct answer?

## Best Solution

If you are on a recent-ish x86 or x86-64 platform (and you probably are), use the

`bsr`

instruction which will return the position of the highest set bit in an unsigned integer. It turns out that this is exactly the same as log2(). Here is a short C or C++ function that invokes`bsr`

using inline ASM: