math - 64 位乘法/除法没有 64 位乘法或除法指令
问题描述
我正在研究一个 Forth 实现,我遇到了对双单元算术(Forth 实现是 32 位)的需求,包括双单元乘法和除法/余数。但是,我正在为其开发的架构 ARM Cortex-M4 缺少 64x64 乘法或 64/64 除法/余数指令(它只有 32x32 乘法和 32/32 除法以及 32x32+64 乘法/累加指令)。
虽然我可以使用 32x64 乘法(因为对于无论如何都不会溢出的情况,可以用它模拟 64x64 乘法),并且对于某些事情,64/32 除法/余数就足够了,我希望至少有一个完整的 64 /64 除法/余数以及 32x64 乘法,所以我可以完全实现双单元算术。
解决方案
您可以将bigmath.f库(或其他变体)作为示例——Wil Baden 的 Double Number Arithmetic。
有定义D*
和DU/MOD
词。
关于执照。我认为这段代码在公共领域。它作为参考实现发表在 Forth Dimensions 1中,作者在那里说:“要获得本文源代码的副本,请发送电子邮件请求 Stretching Forth #19: Double Number Arithmetic”。
字面上DU/MOD
,Wil Baden 还指出:“该算法基于 Knuth 在他的计算机编程艺术第 2 卷中的算法,简化为两格除数和两格除数”。
1威尔巴登 (1998)。拉伸标准 Forth #19:双数算术。Forth Dimensions XIX.6 March-April 1998, pp. 33-34
在第 4 页上,我们还可以阅读:
本期刊中包含的材料(但不是代码)的版权归文章的个人作者和 Forth Interest Group, Inc. [...] 任何带有版权声明的代码,但是,只有在获得许可的情况下才能使用版权所有者的。
而且似乎代码和文章都没有任何版权声明。
推荐阅读
- intellij-idea - 如何在 IntelliJ 生成的构造函数中禁用字段注释的自动包含?
- android - 如何使用 Osmdroid 库在两个坐标之间绘制曲线
- python - 将参数传递给 Scapy 的 Automaton.run() 方法
- android - 如何像 iPhone 一样左对齐 AOSP 的 Launcher3 的工作区
- css - @import 在 Ruby 应用程序的 application.scss 中不起作用
- sql - 将 2 个复杂的 GROUP BY / PARTITION BY 查询转化为 1 个查询
- reactjs - 如何避免 Typescript React 中的重复界面
- python - 如何将按钮的命令函数的返回值作为另一个按钮的命令函数的输入传递
- scala - 我想在 SBT 项目中做 Spark 教程,我需要安装哪些库?
- javascript - async/await 总是返回 undefined