第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
开始不对了。