std::fdim, std::fdimf, std::fdiml
| ヘッダー <cmath> で定義 |
||
| (1) | ||
float fdim ( float x, float y ); double fdim ( double x, double y ); |
(C++23まで) | |
| constexpr /*浮動小数点数型*/ fdim ( /*浮動小数点型*/ x, |
(C++23から) | |
float fdimf( float x, float y ); |
(2) | (C++11以降) (C++23 以降 constexpr) |
long double fdiml( long double x, long double y ); |
(3) | (C++11以降) (C++23 以降 constexpr) |
| SIMDオーバーロード (C++26以降) |
||
| ヘッダー <simd> で定義 |
||
| template< class V0, class V1 > constexpr /*math-common-simd-t*/<V0, V1> |
(S) | (C++26以降) |
| 追加のオーバーロード (C++11以降) |
||
| ヘッダー <cmath> で定義 |
||
template< class Integer > double fdim ( Integer x, Integer y ); |
(A) | (C++23 以降 constexpr) |
std::fdim のオーバーロードを提供します。(C++23以降)|
S) SIMDオーバーロードは、v_xとv_yに対して要素ごとの
std::fdimを実行します。
|
(C++26以降) |
|
A) すべての整数型に対する追加のオーバーロードが提供されます。これらは double として扱われます。
|
(C++11以降) |
目次 |
[編集] Parameters
| x, y | - | 浮動小数点または整数値 |
[編集] Return value
成功した場合、xとyの正の差を返します。
オーバーフローによる範囲エラーが発生した場合、+HUGE_VAL、+HUGE_VALF、または +HUGE_VALL が返されます。
アンダーフローによる範囲エラーが発生した場合、(丸め後の)正しい値を返します。
[編集] Error handling
エラーは math_errhandling で指定された通りに報告される。
実装がIEEE浮動小数点算術 (IEC 60559) をサポートしている場合、
- いずれかの引数が NaN の場合、NaN が返されます。
[編集] Notes
NaNの処理要件を除いて、std::fmax(x - y, 0) と同等です。
追加のオーバーロードは (A) とまったく同じように提供される必要はない。それらは、最初の引数 num1 と2番目の引数 num2 に対して以下を保証するのに十分である必要がある。
|
(C++23まで) |
|
num1とnum2が算術型の場合、std::fdim(num1, num2)はstd::fdim(static_cast</*共通浮動小数点型*/>(num1), そのような最高のランクとサブランクセを持つ浮動小数点型が存在しない場合、オーバーロード解決は提供されたオーバーロードから使用可能な候補を導出しません。 |
(C++23から) |
[編集] Example
#include <cerrno> #include <cfenv> #include <cmath> #include <cstring> #include <iostream> #ifndef __GNUC__ #pragma STDC FENV_ACCESS ON #endif int main() { std::cout << "fdim(4, 1) = " << std::fdim(4, 1) << '\n' << "fdim(1, 4) = " << std::fdim(1, 4) << '\n' << "fdim(4,-1) = " << std::fdim(4, -1) << '\n' << "fdim(1,-4) = " << std::fdim(1, -4) << '\n'; // error handling errno = 0; std::feclearexcept(FE_ALL_EXCEPT); std::cout << "fdim(1e308, -1e308) = " << std::fdim(1e308, -1e308) << '\n'; if (errno == ERANGE) std::cout << " errno == ERANGE: " << std::strerror(errno) << '\n'; if (std::fetestexcept(FE_OVERFLOW)) std::cout << " FE_OVERFLOW raised\n"; }
出力
fdim(4, 1) = 3
fdim(1, 4) = 0
fdim(4,-1) = 5
fdim(1,-4) = 5
fdim(1e308, -1e308) = inf
errno == ERANGE: Numerical result out of range
FE_OVERFLOW raised[編集] See also
| (C++11) |
整数値の絶対値を計算する (|x|) (関数) |
| (C++11)(C++11)(C++11) |
2つの浮動小数点数値のうち大きい方 (関数) |
| Cドキュメント fdim
| |