发现delphi的一个BUG不知道大家是不是已经发现了! ( 积分: 0 )

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

warket

Unregistered / Unconfirmed
GUEST, unregistred user!
随便弄一个按钮写下如下的代码,显示出来的答案你可能都想不到!
var
t1,t2,t3:real;
begin
t1:=6.6;//strtofloat(edit1.Text);
t2:=7.1111;//strtofloat(edit2.Text);
t3:=t2-t1;
edit3.Text:=floattostr(t3);
 
那你把real改成extended出来的也不一样的。不是bug
 
不是0.511100000001?
 
7.111-6.6 不是应该是0.5111 后面的000001哪里来的?
 
这是计算机存储和计算“实型”数时必然的误差,对是“误差”,不是BUG。
所以在编程序时不要简单的比较两个“实数”a与b是否相等,否则极易出错,最保险的办法是
if abs(a-b)<1e-5 then
begin
...
end;
 
浮点数的存储格式是精度有限的,也就是有误差。
 
不是Delphi的bug,是浮点编程规范中应该注意的问题。
 
接受答案了.
 
后退
顶部