c++ - log2 计算在 cpp 中给出错误结果

标签 c++ floating-point precision

在计算大于 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/

相关文章:

c++ - 调试和自由执行中的信号处理

ios - 在 iOS 中本地化一个 float 并指定小数位数

Go float64 不适用于经纬度

java - 使用 MathContext 调用时,BigDecimal.divide() 会产生额外的精度数字

c++ - 当迭代器不是随机访问时,如何在映射结束之前停止迭代 "n"?

c++ - "Refresh"一个 lambda 对象

c++ - 用于查找到元素集的 id 映射的良好数据结构 (c++)

ruby - 在 ruby 中 float 圆形错误?

c++ - float C++,如何在数组的每个元素末尾添加 "f"

delphi - 货币有5位小数吗?