math - 64 位乘法/除法,无需 64 位乘法或除法指令

标签 math arm 64-bit cortex-m forth

我正在开发 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/

相关文章:

math - 程序员理解数学学术著作

java - 为什么 Java Math 库没有返回 float 的函数?

actionscript-3 - 找到满足特定范围的抛物线的角度和速度

无法使用 ARM NEON 内在函数设置 4 个 floatx32 的 vector

c++ - 使用new和delete时交叉编译报错

64-bit - D对64位的支持程度如何?

javascript - 为什么我的 javascript 返回的 Math.log 值不正确?

android-ndk - Android 原生代码在拇指模式下崩溃,但在 ARM 模式下不崩溃

c++ - 在 32 位 Xp 计算机上构建 64 位 Qt

Linux/64 位/LARGEADDRESSAWARE 等效项