0

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

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

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

4

2 回答 2

6

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

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

现在你应该看到区别了。该值9是 IEEE 754 32 位浮点数可表示的 base-10 位数(请参阅下面的 @EricPostpischil 评论)。

于 2013-05-20T23:10:05.240 回答
1

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

于 2013-05-20T23:21:25.023 回答