我似乎记得曾经读过一篇关于计算整数商和余数的讨论中的一个tAOCP分册。我的记忆是他声称不可能在没有另一个的情况下计算一个,并且他认为结果应该都可供程序员使用。问题是大多数编程语言迫使程序员计算类似q = a / b然后r = a%b的东西,但是在引擎盖下CPUB做了两次相同的计算,这是一种浪费。
我刚刚在MMIX Volume Fascicle 1中搜索了第1.3.1节中关于DIV的描述,但我没有找到我似乎记得的讨论。
有人能告诉我他们是否回忆起类似的讨论,我可能会在哪里找到它?
以下可能是您正在寻找的 - 这是我在迄今为止发布的所有TAOCP和(预)分册中找到的唯一相关提及。 (这只是一个句子的一部分,而不是一个精心的讨论,但记忆可能很棘手。)从第1卷第1节,第1.3节(MMIX),特别是1.3.1'(MMIX的描述)。如您所知,在“算术运算”下,定义DIV
运算使得DIV $X,$Y,$Z
(如果$Z
不包含零)将$X
设置为包含$Y
和$Z
中值的(floor)商,并同时将rR
寄存器设置为保留其余部分。
后来,在“MMIX与现实”之下,第二点是:
商业机器通常缺乏对整数算术的支持。例如,当x为负或y为负时,它们几乎从不产生真商⌊x/y⌋和真余数x mod y;他们经常扔掉产品的上半部分。它们不将左右移位视为乘法的严格等价,除以2的幂。有时它们根本不实现硬件划分;当它们处理除法时,它们通常假设128位被除数的上半部分为零。这种限制使得高精度计算更加困难。