霍尼韦尔DPS8计算机(以及其他计算机)具有/曾经具有“分数除法”指令:
“此指令通过将包括符号在内的71位小数被除数(dividend)除以包括符号在内的36位小数除数(divisor),形成一个包括符号在内的36位小数商(quotient)和一个包括符号在内的36位小数余数(remainder)。余数的第35位对应于被除数的第70位。余数的符号等于除数的符号,除非余数为零。”
因此,据我所知,这是整数除法,小数点远在左侧。
(在以前的FORTH中,我曾经进行过整数缩放运算,但我对这些技术的记忆已经逐渐模糊。)
要在DPS8仿真器中实现此指令,我认为需要创建两个70位数字:71位被除数减去其符号位,和36位除数减去其符号位并向左移动35位,以使小数点对齐。
然后使用“%”和“/”(在C语言中)形成余数和商,但我不确定这些结果是否需要归一化(即移位)。
我在"计算机算术"第10页找到了一个“移位和减法”的算法示例,但我更喜欢更直接的实现方式。
我走在正确的道路上吗?还是解决方案更加微妙(修正符号和检测错误的阶段已被省略;这些阶段文档已经很好了。实际除法是问题所在。)任何指向此类硬件仿真的C实现的指针都将特别有帮助。
“此指令通过将包括符号在内的71位小数被除数(dividend)除以包括符号在内的36位小数除数(divisor),形成一个包括符号在内的36位小数商(quotient)和一个包括符号在内的36位小数余数(remainder)。余数的第35位对应于被除数的第70位。余数的符号等于除数的符号,除非余数为零。”
因此,据我所知,这是整数除法,小数点远在左侧。
.qqqqq / .ddddd
(在以前的FORTH中,我曾经进行过整数缩放运算,但我对这些技术的记忆已经逐渐模糊。)
要在DPS8仿真器中实现此指令,我认为需要创建两个70位数字:71位被除数减去其符号位,和36位除数减去其符号位并向左移动35位,以使小数点对齐。
然后使用“%”和“/”(在C语言中)形成余数和商,但我不确定这些结果是否需要归一化(即移位)。
我在"计算机算术"第10页找到了一个“移位和减法”的算法示例,但我更喜欢更直接的实现方式。
我走在正确的道路上吗?还是解决方案更加微妙(修正符号和检测错误的阶段已被省略;这些阶段文档已经很好了。实际除法是问题所在。)任何指向此类硬件仿真的C实现的指针都将特别有帮助。