在if语句中使用浮点数的奇怪错误

时间:2013-05-20 23:07:12

标签: c++ if-statement printing floating-point cout

因此,在我的C ++代码中,我有以下代码行用于调试目的:

if(float1 != float2)
{
    std::cout<<float1<<" "<<float2<<std::endl;
}

正在发生的事情是程序正在进入if语句...但是当我打印出两个浮点值时它们是相同的。但如果它们是相同的,那么它应该完全绕过这个if语句。所以我真的很困惑为什么会这样。

2 个答案:

答案 0 :(得分:6)

float可能只有非常相似的值。默认情况下,I / O库将截断浮点值的输出。您可以通过调用precision的{​​{1}}成员函数来确保获得完全的精确度:

std::cout

现在你应该看到差异了。值if(float1 != float2) { std::cout.precision(9); std::cout<<float1<<" "<<float2<<std::endl; } 是IEEE 754 32位浮点数可表示的基数为10的数字(请参阅下面的@ EricPostpischil的评论)。

答案 1 :(得分:1)

浮点值通常以二进制格式存储在计算机内存中。同时,通过cout打印的值以十进制格式表示。从二进制浮点表示到十进制表示的转换可能是有损的,具体取决于您的转换设置。这种立即意味着您打印的内容不一定与实际存储在内存中的内容完全相同。这解释了为什么float1float2之间的直接比较可能会说它们不同,而十进制打印输出可能看起来相同。