W wilsonyun Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-08 #1 有A,B,C三个实数, 要作一个 if (A-B<>C) then 的试算平衡,该用什么函数呢?
D dmzn Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-08 #5 Var a,b,c:Real; begin a := 12.5; b := 10.5 c := 2.0 If (a-b)<>c Then showmessage('done'); end;
W wilsonyun Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-09 #6 此问题我已解决了, 应该这样做: var a, b, c, tmp :double; begin a := 1200.44; b := 1100.22; c := 100.22; tmp := a - b; if (not ((tmp-c) < 0.001)) then showmessage('不相等'); end;
此问题我已解决了, 应该这样做: var a, b, c, tmp :double; begin a := 1200.44; b := 1100.22; c := 100.22; tmp := a - b; if (not ((tmp-c) < 0.001)) then showmessage('不相等'); end;
J jiansheyou Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-09 #7 涉及到小数的比较的问题还是比较讨厌的。一般的方法要自己定义一个相等的标准,就是说两个数字相似到什么程度就认为是相等了。 比如:0.5555555=0.5555554,在这里面前六位都是相同的。 具体的做法和wilsonyun说得差不多,注意不能使用deiphi自身体提供的比较。坐起来还挺烦人的。
涉及到小数的比较的问题还是比较讨厌的。一般的方法要自己定义一个相等的标准,就是说两个数字相似到什么程度就认为是相等了。 比如:0.5555555=0.5555554,在这里面前六位都是相同的。 具体的做法和wilsonyun说得差不多,注意不能使用deiphi自身体提供的比较。坐起来还挺烦人的。
D dedema Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-09 #8 因为计算机是用二进制来表示的。 所以浮点数上计算机的表示与人的想象有一定的偏差。 如果浮点数刚好是2的负整数次幂,如:0.5,0.125等,则可以精确表示。 如: f:=0.25; if f=0.25 then ShowMessage('相等'); 但如果不是,则不会相等,如: f:=0.1; if f=0.1 then ShowMessage('相等'); 所以判断它们是否相等时,只好判断它们的差的相差是不是在一个很小的范围之内的了。
因为计算机是用二进制来表示的。 所以浮点数上计算机的表示与人的想象有一定的偏差。 如果浮点数刚好是2的负整数次幂,如:0.5,0.125等,则可以精确表示。 如: f:=0.25; if f=0.25 then ShowMessage('相等'); 但如果不是,则不会相等,如: f:=0.1; if f=0.1 then ShowMessage('相等'); 所以判断它们是否相等时,只好判断它们的差的相差是不是在一个很小的范围之内的了。