fdim, fdimf, fdiml
Определено в заголовочном файле <math.h> | ||
|---|---|---|
float fdimf( float x, float y ); | (1) | (с C99) |
double fdim( double x, double y ); | (2) | (с C99) |
long double fdiml( long double x, long double y ); | (3) | (с C99) |
Определено в заголовочном файле <tgmath.h> | ||
#define fdim( x, y ) | (4) | (с C99) |
1-3) Возвращает положительную разность между
x и y, то есть, если x>y, возвращает x-y, иначе (если x≤y) возвращает +0.
4) Обобщённый по типу макрос: если хотя бы один аргумент имеет тип
long double, вызывается fdiml. Иначе, если хотя бы один аргумент имеет целочисленный тип или тип double, вызывается fdim. В противном случае вызывается fdimf.Параметры
| x, y | - | значения с плавающей точкой |
Возвращаемое значение
В случае успеха возвращает положительную разность между x и y.
При ошибке диапазона из-за переполнения возвращается +HUGE_VAL, +HUGE_VALF или +HUGE_VALL.
При ошибке диапазона из-за потери значимости возвращается правильное значение (после округления).
Обработка ошибок
Об ошибках сообщается согласно спецификации в Template:rllpt.
Если реализация поддерживает арифметику с плавающей точкой IEEE (IEC 60559),
- Если хотя бы один аргумент — NaN, возвращается NaN.
Примечания
Эквивалентно fmax(x-y, 0), за исключением требований к обработке NaN.
Пример
#include <errno.h>
#include <fenv.h>
#include <math.h>
#include <stdio.h>
// #pragma STDC FENV_ACCESS ON
int main(void)
{
printf("fdim(4, 1) = %f, fdim(1, 4)=%f\n", fdim(4,1), fdim(1,4));
printf("fdim(4,-1) = %f, fdim(1,-4)=%f\n", fdim(4,-1), fdim(1,-4));
//error handling
errno = 0; feclearexcept(FE_ALL_EXCEPT);
printf("fdim(1e308, -1e308) = %f\n", fdim(1e308, -1e308));
if (errno == ERANGE)
perror(" errno == ERANGE");
if (fetestexcept(FE_OVERFLOW))
puts(" FE_OVERFLOW raised");
}
Возможный вывод:
fdim(4, 1) = 3.000000, fdim(1, 4)=0.000000
fdim(4,-1) = 5.000000, fdim(1,-4)=5.000000
fdim(1e308, -1e308) = inf
errno == ERANGE: Numerical result out of range
FE_OVERFLOW raised
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
- 7.12.12.1 Функции fdim (с. TBD)
- 7.25 Обобщённая по типу математика <tgmath.h> (с. TBD)
- F.10.9.1 Функции fdim (с. TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.12.12.1 Функции fdim (с. 187–188)
- 7.25 Обобщённая по типу математика <tgmath.h> (с. 272–273)
- F.10.9.1 Функции fdim (с. 386)
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.12.12.1 Функции fdim (с. 257)
- 7.25 Обобщённая по типу математика <tgmath.h> (с. 373–375)
- F.10.9.1 Функции fdim (с. 530)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.12.12.1 Функции fdim (с. 238)
- 7.22 Обобщённая по типу математика <tgmath.h> (с. 335–337)
- F.9.9.1 Функции fdim (с. 466)
См. также
|
(C99) | вычисляет абсолютное значение целого числа (\(\small{|x|}\)|x|) (функция) |
|
(C99)(C99)(C99) | определяет большее из двух значений с плавающей точкой (функция) |
Документация C++ для fdim |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/numeric/math/fdim