c语言标准库详解(八):数学公式<math.h>

概述

头文件<math.h>中声明了一些数学函数和宏。
宏 EDOM 和 ERANGE(在头文件<error.h>中声明)是两个非 0 整型常量,用于指示函数的定义域错误和值域错误;HUGE_VAL 是一个 double 类型的正数。当参数位于函数定义的作用域之外时,就会出现定义域错误。在发生定义域错误时,全局变量 errno 的值将被设置为 EDOM,函数的返回值与具体的实现相关。如果函数的结果不能用 double 类型表示,则会发生值域错误。当结果上溢时,函数返回 HUGE_VAL,并带有正确的正负号,errpo 的值将被设置为 ERANGE。当结果下溢时,函数返回 0,而 errno 是否设置为 ERANGE 要视具体的实现而定。
在下表中,x和y的类型为double,n的类型为int,所有函数的返回值的类型均为double。三角函数的角度用弧度表示。

函数名 功能
sin(x) x的正弦值
cos(x) x的余弦值
tan(x) x的正切值
asin(x) sin−1(x)sin^{-1}(x)sin−1(x),值域为[−π/2,π/2][-\pi /2,\pi /2][−π/2,π/2],其中x∈[−1,1]x\in [-1,1]x∈[−1,1]
acos(x) cos−1(x)cos^{-1}(x)cos−1(x),值域为[0,π/2][0,\pi /2][0,π/2],其中x∈[−1,1]x\in [-1,1]x∈[−1,1]
atan(x) tan−1(x)tan^{-1}(x)tan−1(x),值域为[−π/2,π/2][-\pi /2,\pi /2][−π/2,π/2]
atan2(y,x) tan−1(y/x)tan^{-1}(y/x)tan−1(y/x),值域为[−π,π][-\pi,\pi][−π,π]
sinh(x) x的双曲正弦值
cosh(x) x的双曲余弦值
tanh(x) x的双曲正切值
exp(x) 幂函数exe^xex
log(x) 自然对数ln(x),其中x>0
log10(x) 以10为底的对数log10(x)log_{10}(x)log10​(x),其中x>0
pow(x,y) xyx^yxy。如果x=0且y<=10,或者x<0且y不是整型数,将产生定义域错误
sqrt(x) x的平方根,其中x>=0
ceil(x) 不小于x的最小整型数,其中x的类型为double
floor(x) 不大于x的最小整型数,其中x的类型为double
fabs(x) x的绝对值|x|
ldexp(x,n) 计算x×2nx\times 2^nx×2n的值
frexp(x,int *exp) 把 x 分成一个在[1/2, 1]区间内的真分数和一个 2 的幂数。结果将返回真分数部分,并将幂数保存在*exp 中。如果 x 为 0,则这两部分均为 0
modf(x,double *ip) 把 x 分成整数和小数两部分,两部分的正负号均与 x 相同。该函数返回小数部分,整数部分保存在*ip 中
fmod(x,y) 求 x除y 的浮点余数,符号与 x 相同。如果 y 为 0,则结果与具体的实现相关

示例

一般函数

代码:

#include <stdio.h>
#include <math.h>
int main(){double pi = 3.141592654;printf("%f\n",sin(pi/2.0));printf("%f\n",cos(pi));printf("%f\n",tan(pi/4.0));printf("%f\n",asin(0.5));printf("%f\n",acos(0));printf("%f\n",atan(1));printf("%f\n",atan2(1,2));printf("%f\n",sinh(1.14));printf("%f\n",cosh(5.14));printf("%f\n",tanh(1));printf("%f\n",exp(1));printf("%f\n",log(2));printf("%f\n",log10(100));printf("%f\n",pow(2,3));printf("%f\n",sqrt(1024));printf("%f\n",ceil(114.514));printf("%f\n",floor(1919.810));printf("%f\n",fabs(-114));printf("%f\n",ldexp(1.1,2));
}

输出:

PS G:\CSAPP>  & 'c:\Users\swy\.vscode\extensions\ms-vscode.cpptools-0.27.1\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-4fkacns3.4n2' '--stdout=Microsoft-MIEngine-Out-vtf0dshg.kly' '--stderr=Microsoft-MIEngine-Error-kncwqgpb.2qz' '--pid=Microsoft-MIEngine-Pid-amsr1et1.2pt' '--dbgExe=G:\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\mingw64\bin\gdb.exe' '--interpreter=mi'
1.000000
-1.000000
1.000000
0.523599
1.570796
0.785398
0.463648
1.403475
85.360813
0.761594
2.718282
0.693147
2.000000
8.000000
32.000000
115.000000
1919.000000
114.000000
4.400000
PS G:\CSAPP>

frexp

代码:

#include <stdio.h>
#include <math.h>
int main ()
{double x = 1024, fraction;int e;fraction = frexp(x, &e);printf("x = %.2lf = %.2lf * 2^%d\n", x, fraction, e);return(0);
}

输出:

PS G:\CSAPP>  & 'c:\Users\swy\.vscode\extensions\ms-vscode.cpptools-0.27.1\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-h5rcncvy.5t4' '--stdout=Microsoft-MIEngine-Out-vqzpvdtb.g1q' '--stderr=Microsoft-MIEngine-Error-d4icaaa5.v0w' '--pid=Microsoft-MIEngine-Pid-50qt2c35.qtx' '--dbgExe=G:\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\mingw64\bin\gdb.exe' '--interpreter=mi'
x = 1024.00 = 0.50 * 2^11
PS G:\CSAPP>

modf

代码:

/*这其实是一个把浮点数的整数部分与小数部分分离的实用程序*/
#include<stdio.h>
#include<math.h>
int main ()
{double x, fractpart, intpart;x = 114514.1919810;fractpart = modf(x, &intpart);     printf("整数部分 = %lf\n", intpart);printf("小数部分 = %lf \n", fractpart);return(0);
}

输出:

PS G:\CSAPP>  & 'c:\Users\swy\.vscode\extensions\ms-vscode.cpptools-0.27.1\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-qt4optaz.cd1' '--stdout=Microsoft-MIEngine-Out-4k504r2l.rqk' '--stderr=Microsoft-MIEngine-Error-juwootva.ldp' '--pid=Microsoft-MIEngine-Pid-ghshwfhl.zty' '--dbgExe=G:\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\mingw64\bin\gdb.exe' '--interpreter=mi'
整数部分 = 114514.000000
小数部分 = 0.191981
PS G:\CSAPP>

fmod

代码:

#include <stdio.h>
#include <math.h>
int main ()
{float a, b;int c;a = 19.19;b = 5.14;c = 1.14;printf("%f / %d 的余数是 %lf\n", a, c, fmod(a,c));printf("%f / %f 的余数是 %lf\n", a, b, fmod(a,b));return(0);
}

输出:

PS G:\CSAPP>  & 'c:\Users\swy\.vscode\extensions\ms-vscode.cpptools-0.27.1\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-rh51wehg.khq' '--stdout=Microsoft-MIEngine-Out-evzssudj.sjg' '--stderr=Microsoft-MIEngine-Error-f4wajhcd.vmb' '--pid=Microsoft-MIEngine-Pid-3zrc1b30.dh1' '--dbgExe=G:\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\mingw64\bin\gdb.exe' '--interpreter=mi'
19.190001 / 1 的余数是 0.190001
19.190001 / 5.140000 的余数是 3.770001
PS G:\CSAPP>

c语言标准库详解(八):数学公式math.h相关推荐

  1. c语言标准库详解(零):总述

    c语言标准库详解(零):总述 关于标准库 标准库不是C语言本身的构成部分,但是支持标准C的实现会提供函数库中的函数声明.类型以及宏定义 标准库的内容 标准库中的函数.类型以及宏分别在下面的标准头文件中 ...

  2. c语言标准库详解(十二):非局部跳转setjmp.h

    c语言标准库详解(十二):非局部跳转<setjmp.h> 概述 头文件<setjmp.h>中的声明提供了一种不同于通常的函数调用和返回顺序的方式,特别是,它允许立即从一个深层嵌 ...

  3. c语言标准库详解(十五):limits.h与float.h

    c语言标准库详解(十五):<limits.h>与<float.h> 概述 <limits.h> 头文件<limits.h>定义了一些表示整型大小的常量. ...

  4. c语言标准库详解(十一):可变参数表stdarg.h

    c语言标准库详解(十一):可变参数表<stdarg.h> 概述 头文件<stdarg.h>提供了遍历未知数目的函数参数表的功能. 假定函数 f 带有可变数目的实际参数,last ...

  5. c语言标准库详解(七):字符串函数string.h

    c语言标准库详解(七):字符串函数<string.h> 头文件<string.h>中定义了两组字符串函数.第一组函数的名字以 str 开头:第二组函数的名字以 mem 开头.除 ...

  6. c语言标准库详解(十四):时间函数time.h

    c语言标准库详解(十四):时间函数<time.h> 概述 头文件<time.h>中声明了一些处理日期与时间的类型和函数.其中的一些函数用于处理当地时间,因为时区等原因,当地时间 ...

  7. matlab中sinks,MATLAB Simulink模块库详解(二)Sinks篇

    MATLAB Simulink模块库详解(二)Sinks篇 Simulink模块库概述 1.Sources模块库,为仿真提供各种信号源 2.Sinks模块库,为仿真提供输出设备元件 3.Continu ...

  8. MATLAB Simulink模块库详解(二)Sinks篇

    MATLAB Simulink模块库详解(二)Sinks篇 Simulink模块库概述 1.Sources模块库,为仿真提供各种信号源 2.Sinks模块库,为仿真提供输出设备元件 3.Continu ...

  9. STM32 HAL库详解 及 手动移植

    源: STM32 HAL库详解 及 手动移植

最新文章

  1. c#如何读取相机手机的拍摄时间
  2. 数据中心运营之4P标准化运维规程
  3. 阿里云容器服务发布 Knative 托管服务 | 云原生生态周报 Vol. 49
  4. JZOJ__Day 5:【普及模拟】权势二进制
  5. yarn界面中的Minimum Allocation和Maximum Allocation与yarn-site.xml中参数的对应关系
  6. java jconsole rmi 连接不上
  7. mysql列调换位置_mysql互换表中两列数据方法
  8. Liskov替换原则(LSP)
  9. python 默认配置文件_python各类配置文件写法
  10. @font-face的用法,css3使用web字体教程
  11. Java基础:BufferedWriter和PushbackReader
  12. 怎么将ts文件快速合成一个文件
  13. 高质量网站源码_50个高质量的免费网站模板
  14. SPSS 独立样本t检验方法
  15. 怎么清楚计算机硬盘搜索记录,如何去除电脑硬盘删除痕迹
  16. html5怎么把表格边框设为0,css表格边框怎么设置
  17. CollabNet Subversion Edge 版本库访问规则 svn
  18. c语言中千分号的用法,在ChemDraw中输入千分号的教程
  19. 赛季更新服务器维修,12月30日第一赛季结束 夺神之权服务器停机维护公告
  20. 某软件公司绩效考核绩效考核_我们(认为我们)对绩效考核所了解的

热门文章

  1. 华为任正非:理想主义者的胜利
  2. 穿越鸿蒙电视剧,7部“爆款”穿越甜宠剧,你若一部都没看过,那是真落伍了!...
  3. 10-9 查询年龄18-20之间的学生信息(MSSQL)
  4. 支付系统设计:绑卡、签约和身份验证(四)
  5. 关于WINFORM中输入法的设置
  6. 百度快照更新周期、百度收录更新时间
  7. python爬取新浪微博内容_python机器登陆新浪微博抓取数据
  8. Echarts 配置主副标题【转载】
  9. cygwin setup
  10. 微信7.0.10内测更新!除了适配暗黑模式,还有这些实用功能!