math.h熟悉

  1 #include <assert.h>      //验证程序断言
2 #include <ctype.h> // 字符类型
3 #include <errno.h> // 出错码
4 #include <math.h> // 数学常量
5 #include <setjmp.h> // 非局部goto
6 #include <signal.h> // 信号
7 #include <stdarg.h> // 可变参数表
8 #include <stdio.h> // 标准I/O库
9 #include <stdlib.h> // 实用程序库函数
10 #include <string.h> // 字符串操作
11 #include <time.h> // 时间和日期
12 //#include 不常用:
13 #include <complex.h> //支持复数算术运算
14 #include <fenv.h> // 浮点环境
15 #include <float.h> // 浮点常量
16 #include <inttypes.h> //整型格式转换
17 #include <iso646.h> //替代关系操作符宏
18 #include <limits.h> // 实现常量
19 #include <locale.h> // 局部类别
20 #include <stdbool.h> //布尔类型和值
21 #include <stddef.h> // 标准定义
22 #include <stdint.h> // 整型
23 //#include <tgmath.h> //通用类型数学宏
24 #include <wchar.h> //扩展的多字节和宽字符支持
25 #include <wctype.h> //宽字符分类和映射支持
26
27
28
29
30
31
32 // double能精确到1e-15,float只能精确到1e-6,long double能精确到1e-18
33 // 计算几何,数学库,double类型的数在处理时候要有一个精度问题,一般定义成EPS
34
35
36 // 判断一个double类型的数是否为整数
37 // EPS的精度根据题目的要求自定
38
39 #include <math.h>
40
41 #define EPS 1e-8
42
43 inline int is_integer(double f) {
44 return fabs(round(f)-f) < EPS;
45 }
46
47 const double g_PI = atan2(0, -1);
48
49 const int g_a = is_integer(1.39);
50
51 #include <iostream>
52 #include <math.h>
53 #include <stdio.h>
54 #include <limits.h>
55
56 using namespace std;
57
58 int main()
59 {
60
61 printf("%lf\n", hypot(3, 4));
62
63
64 /*
65 // round // 四舍五入
66 printf("%lf\n", round(0.4444444444444449));
67 printf("%lf\n", round(0.5000000000000000));
68 printf("%lf\n", round(0.51));
69 printf("%lf\n", round(0.75));
70 */
71
72 /*
73 // ldexp, frexp // 一个数拆成a*2^b,合成a*2^b
74 // ldexp(5, 2) => 10
75 // frexp(10, &i) = > 5 && i = 1
76
77 int val;
78
79 printf("ldexp=[%lf]\n", ldexp(5, 1));
80 double a = frexp(20, &val);
81 printf("frexp=[%lf, %d]\n", a, val);
82 */
83
84 /*
85 // atan
86 printf("atan(-1234567899)/M_PI=[%.20lf]\n", atan(-1234567899)/M_PI);
87 printf("atan(0)/M_PI=[%.20lf]\n", atan(0)/M_PI);
88 printf("atan(1234567899)/M_PI=[%.20lf]\n", atan(1234567899)/M_PI);
89 */
90
91 /*
92 // acos
93 printf("acos(-1)/M_PI=[%.20lf]\n", acos(-1)/M_PI);
94 printf("acos(0)/M_PI=[%.20lf]\n", acos(0)/M_PI);
95 printf("acos(1)/M_PI=[%.20lf]\n", acos(1)/M_PI);
96 */
97
98 /*
99 // asin
100 printf("asin(-1)/M_PI=[%.20lf]\n", asin(-1)/M_PI);
101 printf("asin(0)/M_PI=[%.20lf]\n", asin(0)/M_PI);
102 printf("asin(1)/M_PI=[%.20lf]\n", asin(1)/M_PI);
103 */
104
105 /*
106 // atan2 // 求点(X, Y)与X正轴的夹角,[-pi, pi)
107 printf("atan2/M_PI=[%.20lf]\n", atan2(-1, 0)/M_PI);
108 printf("atan2/M_PI=[%.20lf]\n", atan2( 0, 1)/M_PI);
109 printf("atan2/M_PI=[%.20lf]\n", atan2( 1, 0)/M_PI);
110 printf("atan2/M_PI=[%.20lf]\n", atan2( 0, -1)/M_PI);
111 */
112
113 /*
114 // log, log10 // lnx log10(x)
115 printf("%lf\n", log(3));
116 printf("%lf\n", log10(3));
117 */
118
119 /*
120 // exp e^x
121 printf("%lf\n", exp(3));
122 */
123
124 /*
125 // pow, sqrt x^a, sqrt(x)
126 printf("%lf\n", sqrt(2));
127
128 printf("%lf\n", pow(2, -1));
129 printf("%lf\n", pow(2, 0));
130 printf("%lf\n", pow(2, 0.5));
131 printf("%lf\n", pow(2, 2));
132 printf("%lf\n", pow(2, 10));
133 */
134
135 /*
136 // floor, ceil 下取整和上取整
137
138 double x = 1.9999999999999998;
139 printf("%lf\n", floor(x));
140 printf("%lf\n", ceil(x));
141 */
142
143
144 /*
145 // modf 先判断是否为整数 拆分成整数和小数
146 double fraction, integer;
147 double number = 1.9999999999999998;
148 fraction = modf(number, &integer);
149 printf("The whole and fractional parts of %lf are %lf and %lf\n", number, integer, fraction);
150 */
151
152 /*
153 // fmod 余数判断是否和mod相等 小数求余
154 printf("%.20lf\n", fmod(2.8, 0));
155
156 // 浮点数不怕不一样,就怕相等,用fabs(a-b) < EPS来解决
157 printf("%.20lf, %.20lf, %.20lf\n", 2.8, 0.2, fmod(2.8, 0.2));
158 puts("===============================================\n");
159 */
160
161 /*
162 // 三角函数
163 // tan
164 printf("tan(-M_PI/2)=[%.20lf]\n", tan(-M_PI/2));
165 printf("tan(0)=[%.20lf]\n", tan(0));
166 printf("tan(M_PI/2)=[%.20lf]\n", tan(M_PI/2));
167 printf("tan(M_PI)=[%.20lf]\n", tan(M_PI));
168 // 带周期
169 printf("tan(1.5*M_PI)=[%.20lf]\n", tan(1.5*M_PI));
170 printf("tan(2.0*M_PI)=[%.20lf]\n", tan(2.0*M_PI));
171 printf("tan(2.5*M_PI)=[%.20lf]\n", tan(2.5*M_PI));
172 printf("tan(3.0*M_PI)=[%.20lf]\n", tan(3.0*M_PI));
173 puts("===============================================\n");
174
175 // sin
176 printf("sin(-M_PI/2)=[%.20lf]\n", sin(-M_PI/2));
177 printf("sin(0)=[%.20lf]\n", sin(0));
178 printf("sin(M_PI/2)=[%.20lf]\n", sin(M_PI/2));
179 printf("sin(M_PI)=[%.20lf]\n", sin(M_PI));
180 // 带周期
181 printf("sin(1.5*M_PI)=[%.20lf]\n", sin(1.5*M_PI));
182 printf("sin(2.0*M_PI)=[%.20lf]\n", sin(2.0*M_PI));
183 printf("sin(2.5*M_PI)=[%.20lf]\n", sin(2.5*M_PI));
184 printf("sin(3.0*M_PI)=[%.20lf]\n", sin(3.0*M_PI));
185 puts("===============================================\n");
186
187 // cos
188 printf("cos(-M_PI/2)=[%.20lf]\n", cos(-M_PI/2));
189 printf("cos(0)=[%.20lf]\n", cos(0));
190 printf("cos(M_PI/2)=[%.20lf]\n", cos(M_PI/2));
191 printf("cos(M_PI)=[%.20lf]\n", cos(M_PI));
192 // 带周期
193 printf("cos(1.5*M_PI)=[%.20lf]\n", cos(1.5*M_PI));
194 printf("cos(2.0*M_PI)=[%.20lf]\n", cos(2.0*M_PI));
195 printf("cos(2.5*M_PI)=[%.20lf]\n", cos(2.5*M_PI));
196 printf("cos(3.0*M_PI)=[%.20lf]\n", cos(3.0*M_PI));
197 puts("===============================================\n");
198 */
199
200 return 0;
201 }
原文地址:https://www.cnblogs.com/nysanier/p/2432512.html