单片机浮点数的实用快速除法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

% ) & 计 算 修 正 因 子 + :8
"$&"# ) "$
% 3 & 计 算 校 准 值 + % + 2? + : ! 并 作 为 最 后 结 果 " 这 里 的 " $ 虽 仍 是 3) 位 ! 但 其 低 :7 位 已 为 2 ! 计 算 时 可 以 将 它 视 为 :7 位 数 ! 这 不 会 影 响 计 算 精 度 " 通 过 两 次 :7 位 除 法 ! 就 可 得 到 精 确 的 3) 位 结 果 " 例 如 ! 计 算 + 2 时 ! 第 一 次 除 法 ! ! 除 以 " $ 的 高 :7 位 ! 得 到 的 商 为 + 2 的 高 :7 位 ! 而 :7 位 余 数 末 尾 添 2 成 3) 位 ! 再 除 以 " $ 的 高 :7 位 ! 得 到 + 2 的 低 :7 位 % 余 数 舍 去 & " 由 此 得 到 了 3) 位 的 + 2 "
! 程序源代码
限于篇幅"只给出源代码中的关键部分"即有效 数字的计算部分(
:被 除 数 为 ;/除 数 为 < : 用 <= / <> 分 别 表 示 < 的 高 *3 位 和 低 *3 位 ??? : 假 设 ; / < 的 有 效 数 字 部 分 分 别 在 2 @; / A; B 和 2 C; / D; B 中 : 计 算 预 估 值 E ( ) 6 2 ; F 1 B F <= G=H> A; / I J :计算 ; F 1 @KLM A; / C; : 计 算 2 ; F 1 B N <= >@ O; / A; : 把 商 暂 放 入 寄 存 器 O ; / 即 P () 的 高 * 3 位 有
)效数字
: 计 算 E ( ) Z E * 6 2 O; / Q; B Z 2 C; / D; B / 只 取 &’ 位 有 效 数 字 >@ =; / C; TM>M A; / C; / Q; : 2 @; / A; B 6 C; Z Q; TM>M D; / O; : 2 C; / D; B 6 D; Z O; A>H Q; D@@ A; / D; D@@A @; / C; D@@A Q; / ( : 2 Q; / @; / A; B 6 2 @; / A; B [ 2 C; / D; B TM>M D; / O; / =; D@@ D; / @; D@@A C; / Q; : 2 C; / D; B 6 O; Z =; : 2 C; / D; B 6 2 C; / D; B [ 2 Q; / @; B : 2 C; / D; B 6 P ( ) Z P *
法 #* $ ! 但 思 路 不 清 晰 ! 很 难 推 广 使 用 " 这 里 给 出 一 种 浮点数除法运算的实用快速算法" 该方法以数值计算 中 的 预 估 / 修 正 方 法 为 指 导 ! 充 分 利 用 了 %0 位 单 片 机 的乘除法功能!很轻易地实现了浮点数的除法"
! : / " # 8 " $/ " # "$ "$
# ( ) ! # * 均 为 精 确 的 &’ 位 " 保 证 了 计 算 过 程 中 的 精 度 "
减 小 了 累 积 误 差 ( 对 于 " ) 6 ( 即 除 数 只 有 *3 位 有 效 数 字 的 特 殊 情 况 " 直 接 有 # *6 * " 还 能 省 去 两 次 * 3 位 除 法 ( 在 计 算 # 时 " 则 通 过 & 次 *3 位 乘 法 实 现 了 &’ 位 乘 法 " 取 结 果 的 高 &’ 位 " 即 得 # ( 整 个 算 法 至 多 只 须 用 1 次 除 法 ’& 次 乘 法 和 9 次 加法"就求得了浮点数商的尾数"可见计算效率是很 高的"保证了运算速度( 浮点数除法流程图如图 & 所示(
在较为复杂的单片机系统中! 为扩大取值范围! 实现复杂的计算和控制! 一般都要涉及浮点数的运 算" 而一般单片机是没有浮点数运算指令的!必须自 行编制相应软件" 在进行除法计算时!通常使用的方 法 是 比 较 除 法 +!, ! 即 利 用 循 环 移 位 和 减 法 操 作 来 得 到
数 扩 展 为 3) 位 % 末 & 位 为 2 & 分 别 放 入 ! 和 " 中 " 令
!"
计算机应用
在 具 体 运 算 中 "! 应 先 除 以 1$! 右 移 ’ 位 %"以 保 证 # ( 不 会 溢 出 2 " $ 取 高 *3 位 4 5
: 的 低 *3 位 有 效 数 字 : R O; / Q; B 6 P ( ) : 计 算 修 正 因 子 P * 6 2 <= S <> B F <= ATU D; / ( : 判 断 <> 是 否 为 ( VWQ XQYE * : 若 <> 非 ( / 计 算 修 正 因 数 E * >@ D; / Q; >@ C; / O; GVTU XQYE XQYE * 5 >@ =; / C; WQX D; @QA C; @KLM D; / =; >@ @; / D; A>H D; @KLM D; / =; >@ C; @; : 若 <> 6 ( / 修 正 因 数 E * 6 * : 2E () Z E *B 6 E ()/ 可 以 直 接 计 算 E
: 计 算 校 准 值 P 6 2 P () ZP *B Z 1 并 调 整 阶 码 XQYP 5 ???
A>H A; @KLM A; / C; >@ Q; / A;
: 把 余 数 末 尾 添 ( 后 再 除 以 <= : 把 商 暂 放 入 寄 存 器 Q; / 即 P ( ) !"#$"
保 存 !!" 的 符 号 和 阶 码
: 把 <= 放 于 寄 存 器 =; 中 : 计 算 <= S <> : 计 算 E * 6 2 <= S <> B N <= : 把 商 暂 时 放 入 寄 存 器 @;/ 即 E * 的 高 *3 位 有 :效数字 : 把 余 数 末 尾 添 ( 后 再 除 以 <= " 得 E * 的 ) 低 *3 位 有 效 数 字 : 2 C; / D; B 6 E *
"### 的 浮 点 数 标 准 规 定 了 单 精 度 % 1 字 节 & ’ 双 精
度 % & 字 节 & 和 扩 展 精 度 % %2 字 节 & 三 种 浮 点 数 的 格 式"最常用的是单精度浮点数!格式如图 % 所示"但是 这种格式的阶码不在同一个字节单元内! 不易寻址! 从而会影响运算速度"
代码到这里为止"浮点数商的有效数字已经全部 求出( 只要再执行一些调整浮点数阶码的操作"就可 以得到最终结果( 在 作 者 开 发 的 一 个 7(\*]3^\ 单 片 机 系 统 中 " 涉 及 到 了 二 进 制S十 进 制 数 制 转 换 ’分 段 线 性 插 值 ’数 字 滤 波 等 大 量 浮 点 数 的 运 算 "都 是 靠 加 减 乘 除 等 底 层 函 数 来 实 现 的 ( 此外"本算法思路清晰"因此很容易加以推广( 例 如"为了得到更高的精度/可取修正因子*
J J )[") # %6 " $ ( " $" "$J
恢复 ! !" 的缺省位 % " 并扩展为 &’ 位 求商的阶码
商已上溢#
0
返回 .
则相 对 误 差 !6 效 数 字 高 达 %1 位 & 参考文献
" !J " " #
) $
&
S 19
" 转化为十进制"有
,
商已下溢#
0
返 回 (/(
,
依 次 计 算 # () ! # *!# 四 舍 五 入 !装 配 结 果 并 返 回
%
数符
&
阶码
’(
尾 数
图 ! "#$$ 单 精 度 浮 点 数 格 式
! " $/ " # & ! "$ "$ " !8 ! " ) ! " $ /"#) & ! " "$) " 8 ! "
)
8Fra Baidu bibliotek
" $)/ " #) / : "$)
)
通常在单片机上采用的是一种变形格式的浮点数! 如 图 ) 所 示 " 其 中 的 )3 位 尾 数 加 上 隐 含 的 最 高 位 %4 构 成 一 个 定 点 原 码 小 数 ! 即 尾 数 为 小 于 % 大 于 等 于 256 的 小 数 " 有 关 浮 点 数 格 式 的 详 细 内 容 请 参 考 有 关 文 献 #% $ #) $ "
" 快速除法的算法原理
在 %7 位 单 片 机 中 只 有 %7 位 的 乘 除 法 ! 而 浮 点 数 的 精 度 % 即 尾 数 的 有 效 位 数 & 达 )1 位 ! 因 此 无 法 直 接 相 除 ! 但 仍 然 可 以 利 用 %7 位 的 乘 除 法 指 令 来 实 现 )1 位 除 法 " 不 过 ! 如 果 只 进 行 一 次 %7 位 的 除 法 必 定 会 带 来很大误差! 因此问题的关键在于如何消除这个误 差!从而达到要求的精度" 这其实就是通常数值计算 中所采用的预估/修正方法" 假设两个浮点数经过预处理后!被除数和除数尾
% 复旦大学计算机系微机开发研究室?十六位单片机 7(]3 的 原 理 和 设 计 方 法 ? 重 庆 5 科 学 技 术 文 献 出 版 社 重
庆 分 社 / %]77
J 涂 时 亮 / 姚 志 石 ? 单 片 微 机 _\! S ]3 F ]7 实 用 子 程 序 ?
上 海 5 复 旦 大 学 出 版 社 / %]]%
+,图 & 浮点数除法流程图
& 李 庆 扬 ? 数 值 分 析 ? 武 汉 5 华 中 工 学 院 出 版 社 / %]73
$ 收 稿 日 期 * J((( S %% S J( %
!"
可 见 只 需 要 在 ! ( "$ 的 基 础 上 再 乘 以 一 个 修 正 因 子 ; " $& " #< = " $! 就 可 以 得 到 ! ( " 的 一 次 校 准 值 " 不 难 证 明 这 个 值 已 经 达 到 了 )- 位 的 精 度 要 求 " 事 实 上!相对误差满足(
! 浮点数格式
# ( ) 6 ! % 1 ! ( &&&&&& (( $ % 1 6 8 & & & ’ 7((( $ "$
由 于 ! 为 &’ 位 $ 末 7 位 为 ( % " 这 一 操 作 不 影 响 有 效 数 字 & 而 # * 6 " $( " )
"$
!*" 不 存 在 溢 出 的 问 题 &
最 后 计 算 校 准 值 # 时 " 有 # 6 1 # () # *& 在 计 算 # ( ) ’ # * 时 " 均 进 行 了 两 次 *3 位 除 法 " 使 得
计算机应用
单片机浮点数的实用快速除法
中 国 科 学 院 电 工 研 究 所 ! :222&2 " 张 玉 明 清 华 大 学 电 机 工 程 及 应 用 电 子 技 术 系 ; :222&- < 王 超
摘 要 ! 介 绍 一 种 在 &2>7 = >& 系 列 单 片 机 上 实 现 的 单 精 度 浮 点 数 快 速 除 法 ! 该 算 法 采 用 了 预 估 / 修 除法 尾数 预估/修正 误差 精度 正 的 数 值 计 算 方 法 "并 充 分 利 用 了 :7 位 @AB 中 的 乘 除 法 指 令 "计 算 速 度 快 # 精 度 高 "有 很 强 的 实 用 性 ! 关键词! 浮点数
!
数符
8
" 2 ** 22 $ $ " " # % &2222222 $ &
# $
! 2 5 >>) ? ) / 32
这说明这个一次校准值完全可以作为最终的结果"
# 算法的具体实现
在具体实现本算法时!主要经过下列步骤( % : & 计 算 预 估 值 + 28 ! )
*(
尾 数
&
阶码
"$
图 ) "$$$ 的 单 精 度 浮 点 数 的 变 形
" # 为 " 的 低 %7 位 4 并 记 " $ % " & " # " 显 然 " $ ! " ’ ! ( "
与 ! ( "$ 相 差 不 多 (
! ( " 8 "$ ! ( "$ " 8 "$ 8 : "$9"# :)"# ( "$
*- . (* 位 商 ! 效 率 很 低 " 有 些 文 献 给 出 了 一 些 改 进 方
相关文档
最新文档