首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

fdim

在头文件<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)。

代码语言:javascript
复制
#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");
}

可能的输出:

代码语言:javascript
复制
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

参考

  • 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 ++文档 |

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com