这两个变量,怎么会不相等呢?

william0218 2008-05-13 11:55:05
有两个float 型的变量mu , muprev
printf("mu = %3.9f\n",mu);
printf("muprev = %3.9f\n",muprev);
if(mu == muprev) goto S10;

在程序里面输出的结果都是 0.000000000。
可是在下面的那个判断中却认为不相等,没有跳到S10。感觉太诡异了,请明白的朋友帮忙看看,谢谢!

...全文
250 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshizhouqi 2008-05-18
  • 打赏
  • 举报
回复
程序代码出错了。。。。。。。。。
woshizhouqi 2008-05-18
  • 打赏
  • 举报
回复
程序代码出错了。。。。。。。。。
woshizhouqi 2008-05-18
  • 打赏
  • 举报
回复
程序代码出错,导致运行错误。。。。。。。。。。
0.00000000是随机值,事实上两个树不等。。。
帅得不敢出门 2008-05-18
  • 打赏
  • 举报
回复
楼主建议你去看下 float型与0值的比较 直接用=与!=来与0相比较是不行的
laden45 2008-05-18
  • 打赏
  • 举报
回复
学习中~
arong1234 2008-05-18
  • 打赏
  • 举报
回复
跟地址有什么关系?都是打印值
[Quote=引用 22 楼 lockhall 的回复:]
是啊,我上次也遇到过这样写的.

第二个打印的是地址,
第一个是?
引用 21 楼 arong1234 的回复:
估计你使用的是不定参数?这是有可能的。不定参数不会替你做类型转换,加入你用int型传浮点数进去,就会如此

例如:
int a = 10;
float b=10;

printf("a=%f, b=%f", a,b);
你就可能看到很有趣的结果
引用 12 楼 woshizhouqi 的回复:
程序代码出错,导致运行错误。。。。。。。。。。
0.00000000…
[/Quote]
lockhall 2008-05-18
  • 打赏
  • 举报
回复
是啊,我上次也遇到过这样写的.

第二个打印的是地址,
第一个是?
[Quote=引用 21 楼 arong1234 的回复:]
估计你使用的是不定参数?这是有可能的。不定参数不会替你做类型转换,加入你用int型传浮点数进去,就会如此

例如:
int a = 10;
float b=10;

printf("a=%f, b=%f", a,b);
你就可能看到很有趣的结果
引用 12 楼 woshizhouqi 的回复:
程序代码出错,导致运行错误。。。。。。。。。。
0.00000000是随机值,事实上两个树不等。。。
[/Quote]
arong1234 2008-05-18
  • 打赏
  • 举报
回复
估计你使用的是不定参数?这是有可能的。不定参数不会替你做类型转换,加入你用int型传浮点数进去,就会如此

例如:
int a = 10;
float b=10;

printf("a=%f, b=%f", a,b);
你就可能看到很有趣的结果
[Quote=引用 12 楼 woshizhouqi 的回复:]
程序代码出错,导致运行错误。。。。。。。。。。
0.00000000是随机值,事实上两个树不等。。。
[/Quote]
arong1234 2008-05-18
  • 打赏
  • 举报
回复
double也有同样的问题,只是你不会搞出来。因为double有15位精度,如果你用%16lf打印,就可以出现类似问题

[Quote=引用 7 楼 fuqd273 的回复:]
附注:double型无此问题。
[/Quote]
ab0029 2008-05-18
  • 打赏
  • 举报
回复
学习学习!!
iambic 2008-05-18
  • 打赏
  • 举报
回复
include了正确的头文件没有?
iloveu365999 2008-05-18
  • 打赏
  • 举报
回复
计算机语言的这点是比较麻烦的,要弄清楚可要明白计算机的运算原理呀!
fuqd273 2008-05-14
  • 打赏
  • 举报
回复

不知道你怎么操作的,怎么看到你认为的结果的,怎么得到你的结论的。
请具体说明你的测试步骤。
oyxiaoyu0 2008-05-13
  • 打赏
  • 举报
回复
对这属于机器精度转换问题.
if((mu-muprev)<0.000001) goto S10
就认为是相等了
fuqd273 2008-05-13
  • 打赏
  • 举报
回复
float型的变量不能这么比较。
举例来说,你把mu和0进行比较的话,是永远不会相等的,只能做下面的判断:
if (mu < FLOAT_MIN && mu > -FLOAT_MIN ) {
...
}

其中,FLOAT_MIN 是误差值,可以是0.000000001之类的小数。
类似的,你要比较2个float数,做差之后,用我上边给出的方法判断吧。
Treazy 2008-05-13
  • 打赏
  • 举报
回复
浮点数类型的缺陷
虽然printf输出的是一样

但是这2个数可能就是不同的!
0.9999999999999可能为1
1.0000000000001也可能为1
c_spark 2008-05-13
  • 打赏
  • 举报
回复
浮点数精度问题,float类型只能精确到小数点后六位
babyvox1999 2008-05-13
  • 打赏
  • 举报
回复
浮点数判断相等要用一个范围判断 如|a-b|<0.00001
william0218 2008-05-13
  • 打赏
  • 举报
回复
谢谢楼上各位的回复,这段代码是ranlib.c里面的一小段,只是里面的输出是我自己加进去的,我在程序里面调用ignpoi()函数时会经过这段代码。问题诡异之处在于,我在不同的地方调用这个函数时,虽然穿进去的值是相同的(我对传入的参数也做过输出,10.000000000),可是一旦到了ignpoi()函数内部,传入的参数就变成了0.00000000,而且,可是在比较这两个值是否相等时,却出现不同的结果,就是说,第一次调用时比较是相同的,第二次调用时比较是不同的。不知道我说没说明白。
fuqd273 2008-05-13
  • 打赏
  • 举报
回复
数据存储格式相关。

建议去查一下谭浩强的C语言,记得里面有解释。

加载更多回复(3)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧