2

我似乎记得曾经阅读过 tAOCP 分册之一 Knuth 关于计算整数商和余数的讨论。我的记忆是,他声称没有另一个就不可能计算一个,并且他认为结果都应该提供给程序员。问题是大多数编程语言都强制程序员计算 q = a/b 然后 r = a%b 之类的东西,但实际上 CPUB 做了两次相同的计算,这是一种浪费。

我刚刚在 MMIX Volume Fascicle 1 在第 1.3.1 节中对 DIV 的描述中进行了搜索,但我没有找到我似乎记得的讨论。

有人可以告诉我他们是否记得类似的讨论,我可以在哪里找到它?

4

1 回答 1

1

以下可能是您正在寻找的内容——这是我在迄今为止发布的所有 TAOCP 和(前)分册中找到的唯一相关提及。(这只是句子的一部分,不是详尽的讨论,但记忆可能会很棘手。)来自第 1 卷第 1 卷第 1.3 节(MMIX),特别是 1.3.1'(MMIX 的描述)。如您所知,在“算术运算”下,该DIV运算被定义为DIV $X,$Y,$Z(如果$Z不包含零)设置为包含和$X中的值的(底)商,同时设置寄存器以保存余数。$Y$ZrR

后来,在“MMIX VS 现实”下,第二点是:

商业机器通常缺乏对整数运算的支持。例如,当x为负数或y为负数时,它们几乎不会产生真商 ⌊<em>x/ y ⌋ 和真余数x mod y;他们经常扔掉产品的上半部分。他们不将左右移位视为严格等价于乘法和除以 2 的幂。有时他们根本没有在硬件中实现除法。当他们处理除法时,他们通常假设 128 位被除数的上半部分为零。这种限制使高精度计算更加困难。

于 2019-02-26T18:14:30.477 回答