为什么两种情况下比较浮点数的输出都不一样?

问题描述 投票:1回答:1

PYTHON程序:

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

OUTPUT:

*

C 方案:

#include <stdio.h>

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

OUTPUT:


为什么两种情况下的产出不同?两者的工作是否有区别?== 操作符?

python c floating-point precision equality
1个回答
3
投票

这是因为float和double类型为mantissa保留的宽度不同。double类型可以更精确地表示浮点数。在这种情况下,这一点很重要,因为0.2不能精确地表示,当以double和float存储时,其表示方法略有不同。

在条件中

if(a == 0.2)

左边操作数的类型是float,而右边操作数的类型是double,因为在C语言中带". "的数字文字的默认类型是double。

所以将声明改为如下方式

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( "*" );
    }
}

其产出是

*
*
© www.soinside.com 2019 - 2024. All rights reserved.