c语言中的float型数据问题[在线等!!!]

程序片断
float t;
if (t==1) 语句1;
if (t==-1) 语句2;
if (t!=1&&t!=-1) 语句3;
程序的初设想是当输入的t为1或-1时分别执行语句1和2,但不能运行
我想是因为是f型数据的原因
问:if函数的括号里应该怎样表示

单精度数float与双精度数double都是不能直接用==来表示相等的!
计算机在表示小数时,都是表示的近似值,只在某一精度以内才有意义。
因此你要判断t==1,只能判断t与1之间相差是否满足你所要求的精度,比如定义一个精度
#define E 0.000001
然后比较时,这样写:
if(abs(t-1) <= E) 语句1;
.....

参考资料:1

温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-01-09
运行是什么错误
是不是这个
scanf : floating point formats not linked
Abnormal program termination
第2个回答  2008-01-09
就像三楼说的
浮点型的数据本来就不是准确的
小数点后面很可能是一串随机数字
如果真的用浮点型来判断的话
很困难
但是如果真的像三楼说的那样用
也反倒麻烦了
而且我认为也不能像三楼那么写
楼主是这么说的“程序的初设想是当输入的t为1或-1时分别执行语句1和2”
按照三楼的做法
if (t!=1&&t!=-1)
这个条件很好满足
但是前两个有些困难吧
因为前两个本身就是要求与一个精确数字的值相等才继续运行
第3个回答  2008-01-09
支持wangyu0831的说法,对于实数,确实不能直接用==号来比较大小,如果要判断实数是否为零的话,就应该进行如下的操作:
const float EPSINON = 0.00001;

if ((x >= - EPSINON) && (x <= EPSINON)

当然,如果是比较实数x和n(任意一个整数)的关系的话,就应该改成:
if (((x-n) >= - EPSINON) && ((x-n) <= EPSINON)
第4个回答  2019-05-10
支持wangyu0831的说法,对于实数,确实不能直接用==号来比较大小,如果要判断实数是否为零的话,就应该进行如下的操作:
const
float
EPSINON
=
0.00001;
if
((x
>=
-
EPSINON)
&&
(x
<=
EPSINON)
当然,如果是比较实数x和n(任意一个整数)的关系的话,就应该改成:
if
(((x-n)
>=
-
EPSINON)
&&
((x-n)
<=
EPSINON)
第5个回答  2019-02-06
取值范围
3.4*10^38
有效数字只有
7

8
个。
例如:
float
a=123.456789;
float
b=123456789.0;
printf("%20.8f\n",a);
printf("%20.8f",b);
打出:
123.45678711
--
后3位不精确
123456792.00000000
--
前7位精确,92
开始不对了。
相似回答