std:: fdim, std:: fdimf, std:: fdiml
|
Определено в заголовке
<cmath>
|
||
| (1) | ||
|
float
fdim
(
float
x,
float
y
)
;
double
fdim
(
double
x,
double
y
)
;
|
(до C++23) | |
|
constexpr
/*floating-point-type*/
fdim
(
/*floating-point-type*/
x,
|
(начиная с C++23) | |
|
float
fdimf
(
float
x,
float
y
)
;
|
(2) |
(начиная с C++11)
(constexpr начиная с C++23) |
|
long
double
fdiml
(
long
double
x,
long
double
y
)
;
|
(3) |
(начиная с C++11)
(constexpr начиная с C++23) |
|
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) | (constexpr начиная с C++23) |
std::fdim
для всех cv-неквалифицированных типов с плавающей точкой в качестве типа параметров.
(since C++23)
|
S)
SIMD перегрузка выполняет поэлементное вычисление
std::fdim
для
v_x
и
v_y
.
|
(since C++26) |
|
A)
Для всех целочисленных типов предоставлены дополнительные перегрузки, которые обрабатываются как
double
.
|
(since C++11) |
Содержание |
Параметры
| x, y | - | значения с плавающей точкой или целочисленные значения |
Возвращаемое значение
В случае успеха возвращает положительную разность между x и y .
Если происходит ошибка диапазона из-за переполнения,
+HUGE_VAL
,
+HUGE_VALF
, или
+HUGE_VALL
возвращается.
Если происходит ошибка диапазона из-за потери значимости (underflow), возвращается корректное значение (после округления).
Обработка ошибок
Ошибки сообщаются, как указано в math_errhandling .
Если реализация поддерживает арифметику с плавающей запятой IEEE (IEC 60559),
- Если любой из аргументов равен NaN, возвращается NaN.
Примечания
Эквивалентно std:: fmax ( x - y, 0 ) , за исключением требований к обработке NaN.
Дополнительные перегрузки не обязаны быть предоставлены в точности как (A) . Они должны быть лишь достаточными для обеспечения того, чтобы для их первого аргумента num1 и второго аргумента num2 :
|
(до C++23) |
|
Если
num1
и
num2
имеют арифметические типы, то
std
::
fdim
(
num1, num2
)
имеет тот же эффект, что и
std
::
fdim
(
static_cast
<
/*common-floating-point-type*/
>
(
num1
)
,
Если такого типа с плавающей запятой с наибольшим рангом и подрангом не существует, то разрешение перегрузки не приводит к пригодному кандидату из предоставленных перегрузок. |
(начиная с C++23) |
Пример
#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'; // обработка ошибок 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
Смотрите также
|
(C++11)
|
вычисляет абсолютное значение целочисленного значения (
|x|
)
(функция) |
|
(C++11)
(C++11)
(C++11)
|
большее из двух значений с плавающей точкой
(функция) |
|
Документация C
для
fdim
|
|