7、定点实数算术运算全解析

定点实数算术运算全解析

在许多嵌入式应用中,对实数的需求往往较少,即便需要,定点实数相较于浮点数也更为常见。这主要是因为处理器可能缺乏浮点指令,带有浮点功能的处理器会增加成本,或者使用浮点数会带来不可接受的性能损失。下面我们将深入探讨定点实数的相关算术运算。

高效运算实现与任意常数除法

部分现代精简指令集计算机(RISC)微处理器,如 ARM 系列处理器芯片,具备对指令操作数进行预移位的能力,从而实现更高效的运算。例如,对于操作数 A,可按以下步骤操作:
1. 获取 A 左移 6 位的副本:$S 2^6 A$
2. 加上 A 左移 3 位的值:$S 2^6 A + 2^3 A$
3. 再加上 A 左移 1 位的值:$S 2^6 A + 2^3 A + 2^1 A$

当除数为常数但处理器没有除法指令时,若处理器有乘法指令,可利用倒数乘法原理进行除法运算。原理上,用乘以 $1/B$ 替代除以 B,即 $A \div B = A * (1/B)$ 。然而,当 $B > 1$ 时,$1/B$ 为 0。为解决此问题,使用 $2^k/B$ 代替 $1/B$ ,并将结果右移 $k$ 位(算术右移)来除以 $2^k$ ,即 $A * (1/B) = [A * (2^k/B)] \div 2^k = [A * (2^k/B)] >> k$ 。

由于乘法指令会产生双倍长度的乘积 P,其最高有效位和最低有效位会分别存于两个单长度存储位置 $P_{hi}$ 和 $P_{lo}$ 。若选择 $k$ 等于处理器的基本字长,无需将 P 右移 $k$ 位,直接从 $P_{hi}$ 获取商即可。

不过,倒数乘法可能会在商中引入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值