
if语句仅适用于一个变量的特定值.我试图做的是我有一个具有一定初始值的变量(bh,外部磁场).我继续减少它直到它在10步内达到-bh,然后它应该开始增加,直到它再次击中bh,依此类推,直到迭代结束.
这适用于bh = .3,但是如果我将它设置为.1,.2或1则不起作用.它开始减少,但直到模拟结束才停止.我的程序中没有其他值等于.3!
我不知道要包括什么,因为主程序有点长.但代码片段是(没有主循环,但包括调试回声):
@H_502_15@float bh; float bmax; bh=.3; bmax=bh;if (bup==1) { printf("BUP=1,BFeld = %.2f\n",bh); bh = bh + bmax/10; if (bh == bmax) { bup=0; }}if (bup==0) { printf("BUP=0,BFeld = %.2f,%.2f = bmin\n",bh,-bmax); bh = bh - bmax/10; if (bh == -bmax) { bup=1; }}我在调试输出方面得到的是bh = .3
@H_502_15@[...]BUP=0,BFeld = -0.24,-0.30 = bminBUP=0,BFeld = -0.27,-0.30 = bminBUP=1,BFeld = -0.30BUP=1,BFeld = -0.27BUP=1,BFeld = -0.24[...]但是当我把bh设置为1时,我得到了
@H_502_15@[...]BUP=0,BFeld = -0.80,-1.00 = bminBUP=0,BFeld = -0.90,BFeld = -1.00,BFeld = -1.10,BFeld = -1.20,BFeld = -1.30,-1.00 = bmin[...]所以我的调试输出甚至给了我“…… – 1.00,-1.00 ……”的行,但不知何故c认为它们不等于“足够”将bup设置为1.我做错了什么?
解决方法 @H_502_15@if (bh == bmax) { bup=1; }使用==来比较浮点数通常不会因为舍入而导致您的预期结果.
将EPSILON定义为一些合理的小值并比较浮点数,如下所示:
@H_502_15@if (fabs(bh - bmax) < EPSILON) 总结以上是内存溢出为你收集整理的if语句仅适用于某些值全部内容,希望文章能够帮你解决if语句仅适用于某些值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)