©
本文档使用
php.cn手册 发布
在头文件<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 | - | floating point value |
---|
如果成功,则返回x和y之间的正差异。
如果发生由溢出引起的范围错误,则返回+ HUGE_VAL,+ HUGE_VALF或+ HUGE_VALL。
如果发生由于下溢导致的范围错误,则返回正确的值(舍入后)。
按照math_errhandling中的指定报告错误。
如果实现支持IEEE浮点运算(IEC 60559),
如果任一参数是NaN,则返回NaN
除NaN处理要求外,相当于fmax(x-y,0)。
#include <stdio.h>#include <math.h>#include <errno.h>#include <fenv.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.000000fdim(4,-1) = 5.000000, fdim(1,-4)=5.000000fdim(1e308, -1e308) = inf errno == ERANGE: Numerical result out of range FE_OVERFLOW raised
C11标准(ISO / IEC 9899:2011):
7.12.12.1 fdim函数(p:257)
7.25类型通用数学<tgmath.h>(p:373-375)
F.10.9.1 fdim函数(p:530)
C99标准(ISO / IEC 9899:1999):
7.12.12.1 fdim函数(p:238)
7.22类型通用数学<tgmath.h>(p:335-337)
F.9.9.1 fdim函数(p:466)
abslabsllabs(C99) | 计算积分值的绝对值(| x |)(函数) |
---|---|
fmaxfmaxffmax1(C99)(C99)(C99) | 决定两个浮点值中较大的一个(函数) |
| 用于fdim的C ++文档 |