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