LaTeX3l3fp
提供了一种检查变量是否具有无限值的方法。以下代码定义一个数字,然后将其值设置为 π/2。然后计算 tan(π/2) 以获得较大的结果。
\ExplSyntaxOn
\fp_new:N \mynumber
\fp_new:N \pi_half
\fp_div:Nn \pi_half{\c_pi_fp/2}
\fp_tan:Nn \mynumber{\pi_half}
\texttt{\mynumber}\\
\fp_if_infinity:NTF \c_infinity_fp {NaN}{Do~something~with~\number}\\
\ExplSyntaxOff
在许多语言中,不定形式通常用钠定义一个宏来测试expl3
所有情况NaN
(例如除以零等)的良好策略是什么?
答案1
LaTeX3 的 FPU 经历了一些重大变化。在 TeX Live 2012 DVD(2012 年 6 月中旬)中包含的版本之前,“旧”FPU 只能以一种方式工作。改进的 FPU 可从开发存储库获得,计划于 2012 年 6 月底发布到 CTAN,可扩展且具有多项改进。
更新的(可扩展)FPU 答案
新的 FPU 认可“不是数字”的概念
\fp_set:Nn \l_tmpa_fp { nan }
NaN 不等于任何值,甚至不等于另一个 NaN:这是许多语言中的标准方法。因此
\fp_compare:nNnTF { nan } = { nan } { \TRUE } { \FALSE }
为假。
原始(不可扩展)FPU 答案
目前,在 中有特殊标记,expl3
表示无限和未定义的结果,\c_infinite_fp
以及\c_undefined_fp
。除以零是未定义的:
\fp_div:Nn \l_my_fp { 0 }
\fp_if_undefined:NTF \l_my_fp { TRUE } { FALSE }
给出TRUE
。
再次思考这个问题,我注意到π/2的正切实际上不应该是无限的,因为它没有极限(考虑级数极限的各种测试)。我怀疑这应该改变:希望下一次expl3
更新能在这方面有所改进。