在 C++ 中通过对数得到错误的答案

getting wrong answer by logarithm in c++

好吧,我正在用 C++ 创建一个程序。然后我注意到有一些错误导致我的程序无法正常运行

使用的编译器:- Dev c++

错误是这样的:-

假设 n1=274877906944 即 2^38。所以 log(n1) 应该是 38,这是正确的。现在让 n2=274877906942 小于 n1.

所以这意味着如果我们计算 log(n2) 那么它必须小于 log(n1)。但是 log(n2) 给我的结果与 log(n1) 相同,即 38。 哪个错了!!!

有人请解释一下这些东西..

您看到的结果是四舍五入的结果。如果你提高你的精度,那就没问题了(注意 <cmath> 中的 log2 函数会将你的整数转换为 double):

std::cout << std::fixed;
std::cout << std::setprecision(16);
std::cout << static_cast<double>(274877906944) << std::endl;
std::cout << static_cast<double>(274877906942) << std::endl;
std::cout << static_cast<double>(274877906948) << std::endl;

std::cout << log2(274877906944) << std::endl;
std::cout << log2(274877906942)  << std::endl;
std::cout<<  log2(274877906948) << std::endl;

生产:

274877906944.0000000000000000
274877906942.0000000000000000
274877906948.0000000000000000
38.0000000000000000
37.9999999999895053
38.0000000000209965

Demo