我正在开发 Forth 实现,其中我遇到了对双单元算术的需求(Forth 实现是 32 位),包括双单元乘法和除法/取余。然而,我正在开发的架构 ARM Cortex-M4 缺少 64x64 乘法或 64/64 除法/求余指令(它只有 32x32 乘法和 32/32 除法以及 32x32+64 乘法/累加指令)。
虽然我可以使用 32x64 乘法(因为在无论如何都不会溢出的情况下可以用它来模拟 64x64 乘法),并且对于某些事情 64/32 除法/余数就足够了,但我想至少有除了 32x64 乘法之外,还有完整的 64/64 除法/余数,这样我就可以完整实现双单元算术。
最佳答案
您可以以 bigmath.f 为例库(或 another variant )— Wil Baden 的双数算术。
定义了D*
和DU/MOD
字。
关于许可证。我认为这段代码属于公共(public)领域。它作为引用实现发布在 Forth Dimensions1 上,作者在那里说道:“要获取本文源代码的副本,请发送电子邮件请求 Stretching Forth #19:双数算术”。
对于 DU/MOD
一词,Wil Baden 还指出:“该算法基于 Knuth 在《计算机编程艺术》第二卷中的算法,简化为两单元被除数和两单元除数”。
1 威尔·巴登 (1998)。扩展标准第四#19:双数算术。 第四维度 XIX.6 1998 年 3 月至 4 月,pp. 33-34
关于page 4我们还可以阅读:
The material contained in this periodical (but not the code) is copyrighted by the individual authors of the articles and by Forth Interest Group, Inc., [...] Any code bearing a copyright notice, however, can be used only with permission of the copyright holder.
而且代码和文章似乎都没有任何版权声明。
关于math - 64 位乘法/除法,无需 64 位乘法或除法指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61221113/