请教一个关于浮点数比较的问题,对老答案的疑惑

LIIJIE1986 2011-05-17 10:05:41
小妹研究一些关于浮点数比较的帖子,基本上是两总方法。
一个是绝对值比较:
if (abs(f1-f2) <e)
then
...
else
...
另外是用delphi 自带的 Math单元
function CompareValue(const A: Extended; const B: Extended; Epsilon: Extended): TValueRelationship; overload;

小妹就茫然在这里了,我看推存第一种方法的人不少,难道delphi自带的CompareValue函数有BUG吗?

多谢各位高手指点
...全文
102 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dinoalex 2011-05-18
  • 打赏
  • 举报
回复
很少处理这类问题, 帮顶, 或者你可以多用数据来测试, 哪种最好就用哪种
Oraclers 2011-05-18
  • 打赏
  • 举报
回复
function SameValue(const A, B: Double; Epsilon: Double): Boolean;
begin
if Epsilon = 0 then
Epsilon := Max(Min(Abs(A), Abs(B)) * DoubleResolution, DoubleResolution);
if A > B then
Result := (A - B) <= Epsilon
else
Result := (B - A) <= Epsilon;
end;

function CompareValue(const A, B: Double; Epsilon: Double): TValueRelationship;
begin
if SameValue(A, B, Epsilon) then
Result := EqualsValue
else if A < B then
Result := LessThanValue
else
Result := GreaterThanValue;
end;
請看上述的在Math單元CompareValue函數的實現,原理與abs(a-b)>e是一樣的,但覺得效率可能不如後者,且我認為後者來得簡單,而且也不用再多記一個函數。
haitao 2011-05-18
  • 打赏
  • 举报
回复
第一种是最原始也最有效的
第二种没用过,可能是改进的吧

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧