关于浮点数的比较 ( 积分: 100 )

  • 主题发起人 主题发起人 riipgah
  • 开始时间 开始时间
R

riipgah

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么3/10=0.3 成立,

var myfloat double;
myfloat=3/10;
myfloat=0.3 不成立呢?
如何解决myfloat=0.3的问题?
 
为什么3/10=0.3 成立,

var myfloat double;
myfloat=3/10;
myfloat=0.3 不成立呢?
如何解决myfloat=0.3的问题?
 
这样的结果不影响计算
 
我记得符点数因为是有误差的,可以这么做
var
myfloat: double;
begin
myfloat:=3/10;
if myfloat-0.3<1E-38 then
或者
var
myfloat,a: double;
begin
myfloat:=3/10;
a:=0.3;
if myfloat=a then
或者不要用浮点数
var
myfloat: Currency;
begin
myfloat:=3/10;
if myfloat=0.3 then
 
接受答案了.
 
浮点数是有一些小误差的.可以自己做一个比较函数.
function FloatEqual(Num1,Num2:real):boolean;
begin
Result:=(Abs(Num1-Num2)/(Num1+Num2))<(1/1000000);
//若Num1和Num2相差小于百万分之一则认为两数相等,否则不等.
end;
也可以设定一个常量, const FloatMinDif=0.000001
上面改为: Result:=(Abs(Num1-Num2)/(Num1+Num2))<FloatMinDif;
自己可以相应更改FloatMinDif,决定两浮点数相差多少才是相等.
这样子FloatEqual(3/10,0.3)就是True了.
 
后退
顶部