第 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 ? y
x
如果和y
是“无序的”,则为真,而这恰好发生在一个或两个操作数是nan
或 是元组的情况下。请注意nan
不同于任何其他值,甚至不同于其本身,即如果x = nan
则为x == x
假。要测试某个值是否为,nan
您可以将“无序”比较与任何其他值一起使用,例如x ? 0
。
这也意味着,如果 和 都不x
是y
或nan
元组,则比较x >? y
将等同于x > y
。
个人备注: 我对这种“无序”比较的实用性持怀疑态度。在我看来,这是在试图解决其他运算符已经涵盖的问题。例如,在传统的编程语言(如 C)中,您可以nan
通过检查一个值是否等于其自身来检查 ,即,如果 ,x == x
则 只会为假。对于元组之间的比较,所有运算符都应该只返回(或最好抛出类型错误),除了 和,它应该执行元素级比较。x
nan
false
==
!=