社区
C语言
帖子详情
这两个变量,怎么会不相等呢?
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
打赏
收藏
这两个变量,怎么会不相等呢?
有两个float 型的变量mu , muprev printf("mu = %3.9f\n",mu); printf("muprev = %3.9f\n",muprev); if(mu == muprev) goto S10; 在程序里面输出的结果都是 0.000000000。 可是在下面的那个判断中却认为不相等,没有跳到S10。感觉太诡异了,请明白的朋友帮忙看看,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
手把手带你学
会
配置环境
变量
本课程
会
在Windows、Linux、Mac平台下配置Python、pyhcarm、mysql、redis、mongodb、虚拟环境等环境配置。对于新手来说,配置环境
变量
是一件头疼的事情,所以我特意录的视频。想入门计算机的小伙伴们,学完本课程后,
会
轻松搞定环境
变量
,还等什么~ 抓紧学起来吧!
java中如何判断
两个
变量
相等
_Java中的==符号与equals()的使用(测试
两个
变量
是否
相等
)...
Java 程序中测试
两个
变量
是否
相等
有两种方式:一种是利用 == 运算符,另一种是利用equals()方法。当使用 == 来判断
两个
变量
是否
相等
时,如果
两个
变量
是基本类型
变量
,且都是数值类型(不一定要求数据类型严格相同),则只要
两个
变量
的值
相等
,就返回true。但是对于
两个
引用类型
变量
,只有它们指向同一个对象时, == 判断才
会
返回true。 == 不可用于比较类型上没有父子关系的
两个
对象。很多书...
在javascript判断
两个
变量
值是否
相等
在javascript判断
两个
变量
值是否
相等
,可以使用 ==(等同)操作符 或者 ===(恒等)操作符 == 操作符 “等同”操作符,简单判断2个
变量
值是否
相等
,
变量
类型不一致时,
会
做类型转换,即忽略
变量
的类型进行比较 例子1 var str1 = "123456" ; // 字符串 var str2 = "123456" ; // 字符串 alert(str1==str2) ; // 打印出 t...
jmeter判断值是否
相等
_判断
两个
变量
是否
相等
在javascript判断
两个
变量
值是否
相等
,可以使用 ==(等同)操作符 或者 ===(恒等)操作符== 操作符“等同”操作符,简单判断2个
变量
值是否
相等
,
变量
类型不一致时,
会
做类型转换,即忽略
变量
的类型进行比较例子1var str1 = "123456" ; // 字符串var str2 = "123456" ; // 字符串alert(str1==str2) ; // 打印出 true,即相...
Java比较
两个
数
相等
的运算符_Java中的==符号与equals()的使用(测试
两个
变量
是否
相等
)...
Java 程序中测试
两个
变量
是否
相等
有两种方式:一种是利用 == 运算符,另一种是利用equals()方法。当使用 == 来判断
两个
变量
是否
相等
时,如果
两个
变量
是基本类型
变量
,且都是数值类型(不一定要求数据类型严格相同),则只要
两个
变量
的值
相等
,就返回true。但是对于
两个
引用类型
变量
,只有它们指向同一个对象时, == 判断才
会
返回true。 == 不可用于比较类型上没有父子关系的
两个
对象。很多书...
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章