我会将所有值表示为整数并适当地缩放它们。例如,当您需要三个十进制数字时,0.124
将表示为124
. 这很好,因为加法和减法是微不足道的。a
将两个数字与相乘时b
,您必须将结果除以1000
以获得正确的表示。通过将结果乘以 来进行除法1000
。
您仍然必须正确解决舍入问题,但这并不是很困难。至少如果你没有接近最大可表示整数(我不记得它是2^31-1
还是2^30-1
)。
这是一些代码:
\def\fixadd#1#2#3{%
#1=#2\relax
\advance #1 by #3\relax
}
\def\fixsub#1#2#3{%
#1=#2\relax
#1=-#1\relax
\advance #1 by #3\relax
#1=-#1\relax
}
\def\fixmul#1#2#3{%
#1=#2\relax
\multiply #1 by #3\relax
\divide #1 by 1000\relax
}
\def\fixdiv#1#2#3{%
#1=#2\relax
\divide #1 by #3\relax
\multiply #1 by 1000\relax
}
\newcount\numa
\newcount\numb
\newcount\numc
\numa=1414
\numb=2828
\fixmul\numc\numa\numb
\the\numc
\bye
这些操作以三寄存器机器为模型,其中第一个是目标,另外两个是操作数。乘法和除法之后的舍入,包括非常大或非常小的数字的极端情况,留给您作为练习。