首页 > 解决方案 > 为什么在两种情况下比较浮点数的输出不同

问题描述

蟒蛇程序

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

输出

*

C程序

#include <stdio.h>

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

输出


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

标签: pythoncfloating-pointprecisionequality

解决方案


这是因为 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( "*" );
    }
}

它的输出是

*
*

推荐阅读