C++中Round函数的未知行为

Unknown behavior of Round function in C++

本文关键字:未知 函数 Round C++      更新时间:2024-09-29
#include <iostream>
int main()
{
double number1 = 1.4999999999999999;
double number2 = 1.499999999999999;
std::cout << "NUMBER 1 => ROUND (" << number1 << ") = " << round(number1) << std::endl;
std::cout << "NUMBER 2 => ROUND (" << number2 << ") = " << round(number2) << std::endl;
std::cin.get();
}

上述代码的输出如下:-

数字1=>圆形(1.5(=2

数字2=>圆形(1.5(=1

我不清楚我的数字1和数字2是如何变为1.5的,如果是的话,它们会变为1.5,那么为什么同一个数字的舍入函数的两个不同输出。

尝试使用长双仍然相同的输出

我正在使用Visual Studio 2019,这会有什么不同吗?

#include <iostream>
int main()
{
double number0 = 1.5;
double number1 = 1.4999999999999999;
double number2 = 1.499999999999999;

std::cout << (number1 == number0) << " " << (number2 < number0) << std::endl;
}

在使用IEEE-754表示浮点的平台上,上述输出1 1。在这种情况下,number1被精确地存储为1.5并且被四舍五入到2,而number2具有严格小于1.5的值并且被四入到1

在使用IEEE-754浮点表示的机器上(即目前的大多数机器(。CCD_ 7与1.5完全相同。

您可以使用std::hexfloat:检查位模式

#include <iostream>
#include <iomanip>
int main()
{
double number1 = 1.4999999999999999;
double number2 = 1.499999999999999;
std::cout << std::hexfloat << number1 << " " << number2 << std::endl;
}

打印0x1.8p+0 0x1.7fffffffffffbp+0