【发布时间】:2022-01-01 02:44:16
【问题描述】:
这是一个关于算法的概念性问题,与我个人解决的问题有关。
在现实生活中的 CPU 架构中,乘法后将溢出位存储在某个寄存器中是很常见的,但如果此功能不可用怎么办?有没有一种有效的方法来计算溢出位?
因为它是一个 溢出 a * b >> bits 不是一个选项。
【问题讨论】:
-
看看归一化(“浮点”)乘法:如果接受明显的不准确性,您可以用几乎一半的不可避免的计算来换取精确的结果。 (当天在Motorola 68000 上进行了“23 位 ± 5 LSB 相乘”。)
-
"任何有用的 CPU 架构在乘法后将溢出位存储在某个寄存器中。"这是一个比较强烈的说法。有许多有用的 CPU 架构没有 N x N -> 2N 乘法。例如 PowerPC、Alpha AXP、AArch64。还是说Power Mac和你的安卓手机没用?
-
@RaymondChen 我更改了我的声明以防我遗漏了什么,但是 RISC 风格的 CPU 没有单独的指令来计算溢出位吗?
-
@xiver77 是的,但是没有“乘以并给我结果和溢出”,这是您的文字所暗示的。您可以保留结果并丢弃溢出,或者保留溢出并丢弃结果。目前尚不清楚哪个处理器(如果有的话)将指令融合为一个乘法。
-
(另见:high bits of product? 和链接/相关。)