找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2525|回复: 0
打印 上一主题 下一主题
收起左侧

如何检查实数值是相等的?【算法】

[复制链接]
跳转到指定楼层
楼主
ID:26188 发表于 2015-5-28 01:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
描述:

对实数进行计算时,由于实数的结构 (指数形式) 以及非常大的数值范围,经常会发生舍入误差,因此两个数值相等的情况 (所有位都相同) 几乎不会出现。所以比较两个实数是否“相等”通常难以获得预期的结果。因此您必须采用其它的方法。其中一种方法是采用近似值的方法。本条目介绍了一种您可以据以判断实数是否“相等”的近似值算法,还包含了一个应用该近似值算法的实例。本条目还简要介绍了实数的格式。
比较实数值是否相等的近似值
此处所述的比较实数所用的近似值基于以下公式:
|(a -b)/(|a| + |b|)| < eps
该近似值可用语言表述如下:
当 a 和 b 之差与 a 和 b 的绝对值之和的比值的绝对值小于“eps”的值时,2 个数值“a”和“b”即被视为相等。
其中需要考虑公式的下列属性:
1. 如果实数“a”和“b”的值非常大,则即使它们相差比较大也被视为等值,此时必须根据系统的需求降低“eps”的值。
如果实数“a”和“b”的值非常小,则只有两数值相差很小时才被视为等值。
注意事项:
此处请注意在一个实数的尾数中,最多只能显示 6 个连续的十六进制数字。
例如
数值举例 1
数值举例 2
(|a| + |b|)
5
5000000
“eps”
10-6 [0.000001]
“a”和“b”可被视为相等时“a”和“b”的差值
0.00000499...
4.999...
表 01
2. 如果“a”和“b”两值都为 0,则“a”和“b”的和也是 0。被 0 除是不允许的且会导致错误结果。因此不能使用近似值比较两个恰好都为 0 的实数“a”和“b”!
3. 如果两个被比较的实数有一个是 0,那么也不使用这个公式计算近似值。近似值结果通常为 1。因此比较结果常常是“不相等”,除非“eps”被设定比 1 大。
注意事项:
  • 如果已经发生了被 0 除的操作,则 CPU 通过置位状态位 OS、OV、A0 和 A1 来指示这一错误。
  • 如果数学函数的结果为 0,则两个状态位 A0 和 A1 不置位。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表