为什么在比较浮点数的两种情况下输出不同

Why is the output different in both cases comparing floats

PYTHON 计划:

a = 0.2
if a == 0.2:
    print('*')

输出:

*

C 程序:

#include <stdio.h>

int main(void) 
{
    float a = 0.2;
    if(a == 0.2)
    {
        puts("*");
    }
}

输出:


为什么两种情况下的输出不同? == 运算符的工作有区别吗?

因为float和double类型的尾数预留宽度不同。 double 类型可以更精确地表示一个浮点数。在这种情况下,重要的是 0.2 无法准确表示,并且当存储为双精度与浮点数时,表示形式略有不同。

条件

if(a == 0.2)

左操作数的类型为 float,而右操作数的类型为 double,作为带有“.”的数字文字的默认类型。在 C 中是双精度数。

所以按照下面的方式修改声明

double a = 0.2;

或者改变条件如

if(a == 0.2f)

这是一个演示程序

#include <stdio.h>

int main(void) 
{
    float a1 = 0.2;

    if ( a1 == 0.2f )
    {
        puts( "*" );
    }

    double a2 = 0.2;

    if ( a2 == 0.2 )
    {
        puts( "*" );
    }
}

它的输出是

*
*