fpclassify(x) == FP_NAN 在功能上等同于 isnan(x) 吗?

Is fpclassify(x) == FP_NAN functionally equivalent to isnan(x)?

fpclassify(x) == FP_NAN 在功能上等同于 isnan(x) 吗?

同样的问题适用于:

如果它们在功能上是等同的,那么为什么需要重复?

它们在功能上是等价的。但是 fpclassify 允许您执行单个测试并使用 switch 语句,这可能比链式 if/else if 生成的代码稍微快 and/or 更简单/else 块将用于逐个类型地执行检查(假设 fpclassify 本身有有效的方法来区分自己;不会发誓),例如每 the cppreference example:

const char *show_classification(double x) {
    switch(fpclassify(x)) {
        case FP_INFINITE:  return "Inf";
        case FP_NAN:       return "NaN";
        case FP_NORMAL:    return "normal";
        case FP_SUBNORMAL: return "subnormal";
        case FP_ZERO:      return "zero";
        default:           return "unknown";
    }
}