20

C++ 2011 標準ライブラリの nextafter 関数と nexttoward 関数の違いは何ですか?

4

2 に答える 2

15

関数は C に由来するため、オーバーロードすることはできません。これは、同じことを行うが異なるパラメーター (型) を持つ関数の 2 つの異なる名前を意味します。元の署名は次のとおりです。

float nextafter(float, float);
float nexttoward(float, long double);

そして今、標準は、C++ で物事をより良くするためにいくつかのオーバーロード§26.8 [c.math] p11が必要であると述べているだけです ( ):

さらに、次のことを保証するのに十分な追加のオーバーロードがあるものとします。

  1. パラメータに対応する引数doubleに型がある場合、パラメータにlong double,対応するすべての引数doubleは効果的に にキャストされlong doubleます。
  2. それ以外の場合、パラメーターに対応する引数doubleに型doubleまたは整数型がある場合、パラメーターに対応するすべての引数doubleは効果的に にキャストされdoubleます。
  3. それ以外の場合、パラメーターに対応するすべての引数doubleは効果的に にキャストされfloatます。

参照: ISO C 7.5、7.10.2、7.10.6。

于 2012-08-21T22:18:56.017 に答える
1

マニュアルページを読む:

nexttoward() 関数は、long double の 2 番目の引数を持つことを除いて、nextafter() 関数と同じことを行います。

于 2012-08-21T22:15:25.443 に答える