如何在 LaTeX3 中定义 NaN

如何在 LaTeX3 中定义 NaN

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更新能在这方面有所改进。

相关内容