如何比较实数是否相等呢?(50分)

  • 主题发起人 主题发起人 wilsonyun
  • 开始时间 开始时间
W

wilsonyun

Unregistered / Unconfirmed
GUEST, unregistred user!
有A,B,C三个实数, 要作一个 if (A-B<>C) then 的试算平衡,该用什么函数呢?
 
直接算不行吗?
 
即使相等也不能为True
 
一般是取小数点若干位 例如 6位 来四舍五入 再比较
 
Var a,b,c:Real;
begin
a := 12.5;
b := 10.5
c := 2.0
If (a-b)<>c Then showmessage('done');
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;

 
涉及到小数的比较的问题还是比较讨厌的。一般的方法要自己定义一个相等的标准,就是说两个数字相似到什么程度就认为是相等了。
比如:0.5555555=0.5555554,在这里面前六位都是相同的。
具体的做法和wilsonyun说得差不多,注意不能使用deiphi自身体提供的比较。坐起来还挺烦人的。
 
因为计算机是用二进制来表示的。
所以浮点数上计算机的表示与人的想象有一定的偏差。
如果浮点数刚好是2的负整数次幂,如:0.5,0.125等,则可以精确表示。
如:
f:=0.25;
if f=0.25 then
ShowMessage('相等');
但如果不是,则不会相等,如:

f:=0.1;
if f=0.1 then
ShowMessage('相等');

所以判断它们是否相等时,只好判断它们的差的相差是不是在一个很小的范围之内的了。

 
后退
顶部