c ++(unsigned)(long((double)(8)/(double)log(2.0))== 2?

-3 c++ logging casting

正如标题所说我得到的东西非常不合理.

我有一个C++程序,我想要做的是弄清楚我的新高度对于二项式队列.

要做到这一点,我在标题中使用了算法:

(unsigned)(long((double)(8) / (double)log(2.0))
Run Code Online (Sandbox Code Playgroud)

它实际上看起来像:

// int count = # of nodes within my vector. 
(unsigned)(long((double)(count) / (double)log(2.0))
Run Code Online (Sandbox Code Playgroud)

并且它确实打印出一个双3.00000,但当我尝试将其转换为"unsigned int"时,它给了我一个2.

为什么它给我这个答案?救命?

Ben*_*igt 5

转换为整数会引入高达1.0的量化(截断)误差.

无论如何,在计算树的所需深度时,您需要确保向上舍入.

顺便说一句,有更好的计算log base 2的方法比对数的比率.例如,gcc __builtin_clz将非常有用,MSVC等效_BitScanReverse.