【发布时间】:2019-05-19 19:34:40
【问题描述】:
我需要将一个数字 N 除以另一个数字 D,两者都大于我的 32 位字长
目前我正在使用此处找到的算法: http://justinparrtech.com/JustinParr-Tech/an-algorithm-for-arbitrary-precision-integer-division/
我正在为 RISC-V ISA 实施我的解决方案
但是在第三步Q = N / A的时候,如果余数也是32位数字我不知道该怎么办,因为通常我会用这个余数来除下一个单词但是如果这是寄存器的大小,不可能考虑到它。
我一直在考虑如何解决这个问题,但我想出的每一个解决方案我都觉得这不是最好的方法。
【问题讨论】:
-
在该页面上的示例中,看起来他们没有保留该步骤的其余部分。另请记住,您通常使用基数 2^32 或基数 10^9,因此每个 32 位整数都是一个“数字”。实际上使用 10 进制数字是非常低效的。
-
但要使其工作,您需要 64 位 / 32 位 => 32 位除法指令。 (许多 32 位 ISA 提供了这一点)。否则你必须使用 32-bit / 32-bit => 32-bit 来做 16-bit 块。
标签: assembly 32-bit bigint riscv