exp(200)-1/exp(-200)=0 但 exp(100)-1/exp(-100)<>0 !!!邪乎吗?(50分)

L

Liyue

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手:
以下是二段内容相同的delphi程序(用delphi5编辑),
第一段程序,计算exp(100)-1/exp(-100),理论上结果应为零。
但用PⅢ运行实际结果不为零?!为什么?!
我用老式“586”计算机”,得到的结果却为零!!!
这样就有一个残酷的推论:
推论:三年前我们用“586”计算机开发的软件在PⅢ上可能出现错误结果!!!
如果这个软件用于楼房设计,那后果将.....当心啊,朋友!
第二段程序,计算exp(200)-1/exp(-200),理论上结果应为零。
用PⅢ运行实际结果也为零。
为什么数字大了,结果反而正确了呢?!!!
请大虾指点迷津,谢谢!!!

*******************
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c:double;
begin
c:=exp(-100);
a:=exp(100);
b:=1/c;
edit1.Text:=floattostr(a);//运行结果:2.68811714181614E43
edit2.Text:=floattostr(b);//运行结果:2.68811714181614E43
edit3.Text:=floattostr(a-b);//运行结果:4.95176015714152E27,为什么???
//但在586计算机上运行结果为0;为什么???
end;
*******************************************************************
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c:double;
begin
c:=exp(-200);
a:=exp(200);
b:=1/c;
edit1.Text:=floattostr(a);//运行结果:7.22597376812575E86
edit2.Text:=floattostr(b);//运行结果:7.22597376812575E86
edit3.Text:=floattostr(a-b);//运行结果:0为什么变量增加了,结果反而变对了???
end;


 
不邪乎,想想计算机的浮点运算原理就知道了。
用a-b=0来判断a,b是否相等的做法本来就不合理。
 
Liyue:如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
请认真阅读大富翁论坛规则说明 http://www.delphibbs.com/delphibbs/rules.htm
 
你试试
if a=b then
edit3.Text:=floattostr(a-b);
 
接受答案了.
 

Similar threads

D
回复
0
查看
902
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部