正如标题所说我得到的东西非常不合理.
我有一个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.
为什么它给我这个答案?救命?
转换为整数会引入高达1.0的量化(截断)误差.
无论如何,在计算树的所需深度时,您需要确保向上舍入.
顺便说一句,有更好的计算log base 2的方法比对数的比率.例如,gcc __builtin_clz将非常有用,MSVC等效_BitScanReverse.
| 归档时间: |
|
| 查看次数: |
492 次 |
| 最近记录: |