4

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)

それらが機能的に同等である場合、なぜ重複が必要なのですか?

4

1 に答える 1

4

それらは機能的に同等です。ただしfpclassify、単一のテストを実行してステートメントを使用することはできます。これは、チェーンされた/ /ブロックがタイプごとのチェックを実行するために使用するswitchよりも、わずかに高速であり、かつ/またはより単純なコードを生成する可能性があります (それ自体を区別する効率的な方法があると仮定して; 勝ち) t はそれを誓います)、たとえばcppreference の例ごとに:ifelse ifelsefpclassify

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";
    }
}
于 2021-02-10T17:40:46.973 に答える