我正在使用计数器来保存正整数,如下所示:
\setcounter{mycoutervalue}{59}
在这种情况下,我可以保存在计数器中的值是否有任何限制mycountervalue
?确切的限制是多少?
谢谢!我不想出现意外溢出。
答案1
最大值是“通常”的2^31-1
长整数值,以及从的负范围-2^31
,因此整个范围都是2^32
可能的整数。
2^31-1
\ifnum
是 2147483647,这是可用于计数器或代码的最大整数\numexpr
。
在下面的代码中,我将此数字存储到计数器中\mycounter
,并在使用后多次打印它\stepcounter
。第一次之后,\stepcounter
寄存器溢出,数字设置为-2147483648
,即可能的“最大”负数。随后的\stepcounter
工作正常。
标准e-TeX
将 256 个寄存器(计数、跳过等)的限制扩展到 32568 个可能的寄存器(每种类型)
\documentclass{article}
\newcounter{mycounter}
\begin{document}
\setcounter{mycounter}{2147483647}
\themycounter % prints 2147483647
\stepcounter{mycounter} % Now the overflow will occur
\themycounter % prints -2147483648
\stepcounter{mycounter}
\themycounter % -2147483647
\end{document}
答案2
根据 TEXbook 的说法:
TEX 有 256 个寄存器称为
\count0
,\count255
每个寄存器可保存介于 -2147483647 和 +2147483647 之间的整数(含);即,数值应小于 2 31。