为什么在比较浮点数的两种情况下输出不同
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( "*" );
}
}
它的输出是
*
*
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( "*" );
}
}
它的输出是
*
*