xfp 包中的 {\x >\y} 和 {\x >? \y} 有什么区别?

xfp 包中的 {\x >\y} 和 {\x >? \y} 有什么区别?

第 1/2 页xfp 封装我们将其视为x >? y有效的比较运算符。它与 不同吗x>y?根据我的以下代码,我认为它们是等效的,但不确定:

  \documentclass{article}

\usepackage{,xfp}

\begin{document}

\edef\x{5}
\edef\y{6}
\fpeval{\x>? \y}\\
\fpeval{\x> \y}
\end{document}

两者的结果都是零。那么它们一般等价吗?

答案1

问号?是的“无序”比较l3fp。或多或少引用了的文档\fp_compare_p:nNn

x ? yx如果和y是“无序的”,则为真,而这恰好发生在一个或两个操作数是nan或 是元组的情况下。请注意nan不同于任何其他值,甚至不同于其本身,即如果x = nan则为x == x假。要测试某个值是否为,nan您可以将“无序”比较与任何其他值一起使用,例如x ? 0

这也意味着,如果 和 都不xynan元组,则比较x >? y将等同于x > y


个人备注: 我对这种“无序”比较的实用性持怀疑态度。在我看来,这是在试图解决其他运算符已经涵盖的问题。例如,在传统的编程语言(如 C)中,您可以nan通过检查一个值是否等于其自身来检查 ,即,如果 ,x == x则 只会为假。对于元组之间的比较,所有运算符都应该只返回(或最好抛出类型错误),除了 和,它应该执行元素级比较。xnanfalse==!=

相关内容