在计算大于 49 的数字的 log2 值时,Visual Studio 2015 和 gcc4.8 都会给出错误的结果。
double log2_49_ones = log2(0x1FFFFFFFFFFFF); // result is 49 - should be 48
double log2_48_ones = log2(0xFFFFFFFFFFFF); // result is 47 - correct result
知道这是否是一个错误吗?
最佳答案
log2()
采用浮点/ double 字作为参数,因此您可能会在隐式转换期间丢失精度。
你可以使用这个技巧:
unsigned int number = 59029; // example
int targetlevel = 0;
while (number >>= 1) ++targetlevel;
感谢此 answer .
关于c++ - log2 计算在 cpp 中给出错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43955597/