我正在用c ++创建一个程序。然后我注意到由于我的程序运行不正常而出现了一些错误
使用的编译器: - Dev c ++
错误是这样的: -
假设n1 = 274877906944, 2 ^ 38 。所以log(n1)应该是38,这是正确的。现在让n2 = 274877906942小于n1。
这意味着如果我们计算log(n2)然后它必须给我小于log(n1)。但是log(n2)给了我与log(n1)相同的结果,即38。 这是错的!!!
有人请解释这个东西..
答案 0 :(得分:2)
您会看到由于四舍五入而导致的结果。如果你提高了精确度,它就可以了(请注意log2
中的<cmath>
函数会将整数转换为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