【发布时间】:2022-01-18 15:34:03
【问题描述】:
给定一对浮点数,执行三路比较的最佳方法是什么,即返回负数、零或正数,具体取决于第一个数是小于、等于还是大于第二个数字?
一些语言,如 Perl、Java 和 C++20,内置了这个运算符,或者在标准库中。但是,我问的是如何用纯 C 语言做到这一点。
如果输入是整数,那么编写一对双向比较将是一件简单的事情。但是由于 NaN 的特殊行为,浮点输入更复杂。考虑到这一点,什么是合适的方法?
【问题讨论】:
-
您可能还想考虑一个“epsilon”来表示相等。无论如何,你需要这个做什么?我不记得我需要这样的任何情况。
-
您希望如何提供结果?作为 -1、0 或 +1 的整数,表示小于、等于或大于,或作为任何负数、零或任何正数的整数,表示小于、等于、等于或大于比?或者是其他东西?如果一个或两个操作数都是 NaN,你想要什么结果?
-
需要区分4种不同的比较结果,小于、等于、大于、无序。我可能会首先使用
isunordered(x, y)宏来测试它。您将需要一个 4 向值来表示它。 -
@BarmakShemirani 1) 如果它在一个系统上工作,它证明什么。其他系统可能会给出其他结果。 2) 您是否还检查了最小值、最大值、NaN 和无穷大值? 3)OP没有告诉我们所需结果的数据类型。它可能不是浮点数。
-
rwallace,返回类型必须是
int?double怎么样?这允许返回NAN,其中x或y是NAN。在比较 +/- 0.0 和 +/- 0.0(4 种组合)时,我希望您希望返回 value 为 0.0。如果有时为 -0.0 或必须为 +0.0,可以吗?
标签: c floating-point comparison-operators