一题简单而复杂的C语言

来源:百度知道 编辑:UC知道 时间:2024/06/21 09:43:38
#include<stdio.h>
void main()
{
float a ;
scanf("%f",&a);
if(a==3.24)
printf("1");
else
printf("0");
}

#include<stdio.h>
void main()
{
float a ,b;
b=3.24;
scanf("%f",&a);
if(a==b)
printf("1");
else
printf("0");
}
想问问同样是输入3.24为什么得出的答案会不一样?
有没有人能仔细解答一下?

这设计到2个浮点数的比较了

查看include文件,在float.h头文件中有很多关于浮点数的宏定义:

#define FLT_EPSILON 1.19209290E-07F
#define LDBL_EPSILON 1.084202172485504E-19

这两个宏定义可用来作为float、 long double趋0最小的判断值。即:
#include <float.h>;

double a, b;
if( abs(a-b) < FLT_EPSILON )
相等;
else
不相等;

第一个程序
3.24默认情况是double型的,而a是float型的,所以不等。你可以这样改
a==(float)3.24就成立了。
第二个程序
b=3.24,它会自动将3.24转换为b的类型(float)
所以两个类型相同,即相等。

第一个输出1
第二个输出0
第二个直接赋值和读取3.24是有区别的。
直接赋值,实际值是a=3.2400000000(后面的0填满float的位数)
而a=3.24
如果用a-b==0作判别就应该没有问题了。

float型会截取二进制的4位字节,输入float型的a=3.24是大于3.24