网站开发费用一般为多少,网站发布文章怎么才能让百度收录,搜索引擎网站推广如何优化,长沙网站建设设计math.h 头文件提供了很多数学计算方面的函数。 一、使用数学函数前需要了解的两个类型、两个宏 1、float_t#xff1a;当前系统能够有效执行float运算的类型#xff0c;宽度不少于float。 2、double_t#xff1a;当前系统能够有效执行double运算的类型#xff0c;宽度不… math.h 头文件提供了很多数学计算方面的函数。 一、使用数学函数前需要了解的两个类型、两个宏 1、float_t当前系统能够有效执行float运算的类型宽度不少于float。 2、double_t当前系统能够有效执行double运算的类型宽度不少于double。 使用系统的float_t、double_t的宽度见例子 3、INFINITY该宏表示正无穷(表示计算出来的结果太大无法显示) 4、NAN 该宏表示非数字表示计算出来的结果不能用数字表示 二、数学函数计算过程中发生错误时报错类型方式 Range errors函数返回类型无法表示运算结果 Domain errors函数参数错误 Pole errors参数导致函数的极限值变成无限 Overflow errors运算结果太大向上溢出 Underflow errors运算结果太小向下溢出 三、判断参数是否存在错误的几个函数 1、fpclassify(参1); 参数 参1int、float、double等类型的值或表达式 返回值 a.当参数值或表达式为正无穷大或负无穷大时返回FP_INFINITE b.当参数不是数字时返回FP_NAN c.当参数为零时返回FP_ZERO d.当参数为正或负非正常值时返回FP_SUBNORMAL e.当参数为非零的、正常值时返回FP_NORMAL 2、isfinite(参1); 参数参1int、float、double等类型的值或表达式 返回值如果参数不是无限或 NAN返回1真否则返回0。 3、isinf(参1); 参数参1int、float、double等类型的值或表达式 返回值如果参数是正无穷或负无穷返回1(真)否则返回0。 4、isnan(参1); 参数参1int、float、double等类型的值或表达式 返回值如果参数不是数字返回1真否则返回0。 5、isnormal(参1); 参数参1int、float、double等类型的值或表达式 返回值如果参数是正常数字返回1真否则返回0。 说明 a.使用以上一个或几个函数特别是第1个函数对数学函数的参数进行一下检验再正式 调用数学函数可以避免出现计算错误。 b.现在的编译器很聪明等不到程序发现错误编译器就提前发现了。 6、signbit(参1); 参数参1int、float、double等类型的值或表达式 返回值如果参数为负值返回非0数否则返回0。 四、很多数学函数的返回值是 double 类型但是同时提供 float 类型与long double类型的版本这种版本就是在函数名后边加上f或者l函数是否有这种版本一试便知。acos()函数还同时存在acosf()和acosl()。 五、验证程序
#includestdio.h
#includemath.h
char* myFpclassify(double x)
{switch (fpclassify(x)) {case FP_INFINITE:return 参数为正无穷大或符无穷大;break;case FP_NAN:return 参数不是数字\n;break;case FP_ZERO:return 参数是零;break;case FP_SUBNORMAL:return 参数不是正常数字;break;case FP_NORMAL:return 参数是正常数字;break;default:return 参数无法判断;}
}
int main()
{ //float_t、double_t的宽度printf(float_t sizeof:%d\n, (int)sizeof(float_t));//运行结果float_t sizeof:4printf(float sizeof:%d\n, (int)sizeof(float));//运行结果float sizeof:4printf(double_t sizeof:%d\n, (int)sizeof(double_t));//运行结果double_t sizeof:8printf(double sizeof:%d\n, (int)sizeof(double));//运行结果double sizeof:8printf(INFINITY:%f\n, INFINITY);//运行结果INFINITY:infprintf(NAN:%f\n, NAN); //运行结果NAN:nan
//实验fpclassify函数char* s myFpclassify(1.0 / 1.2e300); //运行结果参数是正常数字printf(%s\n, s);s myFpclassify(0.0 / 1.2e300); //运行结果参数是零printf(%s\n, s);
//实验signbit函数printf(-3.14signbit%d 3.14signbit%d\n, signbit(-6.28), signbit(3.14));//运行结果 -3.14signbit32768 3.14signbit0
//数学函数版本printf(acos(0.145)%.10f\n,acos(0.145));//运行结果acos(0.145)1.4252833543printf(acosf(0.145)%.10f\n,acosf(0.145));//运行结果acosf(0.145) 1.4252833128printf(acosl(0.145)%.10f\n,acosl(0.145));//运行结果acosl(0.145) 1.4252833543getchar();return 0;
}