if语句仅适用于某些值
发布时间:2020-12-16 09:46:03 所属栏目:百科 来源:网络整理
导读:我在c中编程物理(蒙特卡罗旋转磁场)模拟并遇到了一种奇怪的问题. if语句仅适用于一个变量的特定值.我试图做的是我有一个具有一定初始值的变量(bh,外部磁场).我继续减少它直到它在10步内达到-bh,然后它应该开始增加,直到它再次击中bh,依此类推,直到迭代结束.
我在c中编程物理(蒙特卡罗旋转磁场)模拟并遇到了一种奇怪的问题.
if语句仅适用于一个变量的特定值.我试图做的是我有一个具有一定初始值的变量(bh,外部磁场).我继续减少它直到它在10步内达到-bh,然后它应该开始增加,直到它再次击中bh,依此类推,直到迭代结束. 这适用于bh = .3,但是如果我将它设置为.1,.2或1则不起作用.它开始减少,但直到模拟结束才停止.我的程序中没有其他值等于.3! 我不知道要包括什么,因为主程序有点长.但代码片段是(没有主循环,但包括调试回声): float bh; float bmax; bh=.3; bmax=bh; if (bup==1) { printf("BUP=1,BFeld = %.2fn",bh); bh = bh + bmax/10; if (bh == bmax) { bup=0; } } if (bup==0) { printf("BUP=0,BFeld = %.2f,%.2f = bminn",bh,-bmax); bh = bh - bmax/10; if (bh == -bmax) { bup=1; } } 我在调试输出方面得到的是bh = .3 [...] BUP=0,BFeld = -0.24,-0.30 = bmin BUP=0,BFeld = -0.27,-0.30 = bmin BUP=1,BFeld = -0.30 BUP=1,BFeld = -0.27 BUP=1,BFeld = -0.24 [...] 但是当我把bh设置为1时,我得到了 [...] BUP=0,BFeld = -0.80,-1.00 = bmin BUP=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.我做错了什么? 解决方法if (bh == bmax) { bup=1; } 使用==来比较浮点数通常不会因为舍入而导致您的预期结果. 将EPSILON定义为一些合理的小值并比较浮点数,如下所示: if (fabs(bh - bmax) < EPSILON) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |