fpclassify(x) == FP_NAN 在功能上等同于 isnan(x) 吗?
Is fpclassify(x) == FP_NAN functionally equivalent to isnan(x)?
fpclassify(x) == FP_NAN
在功能上等同于 isnan(x)
吗?
同样的问题适用于:
fpclassify(x) == FP_INFINITE
对比 isinf(x)
fpclassify(x) == FP_NORMAL
对比 isnormal(x)
fpclassify(x) == FP_SUBNORMAL
对比 issubnormal(x)
fpclassify(x) == FP_ZERO
对比 iszero(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";
}
}
fpclassify(x) == FP_NAN
在功能上等同于 isnan(x)
吗?
同样的问题适用于:
fpclassify(x) == FP_INFINITE
对比isinf(x)
fpclassify(x) == FP_NORMAL
对比isnormal(x)
fpclassify(x) == FP_SUBNORMAL
对比issubnormal(x)
fpclassify(x) == FP_ZERO
对比iszero(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";
}
}