Arduino - Thư viện Toán học
Thư viện Arduino Math (math.h) bao gồm một số hàm toán học hữu ích để thao tác với các số dấu phẩy động.
Macro thư viện
Sau đây là các macro được định nghĩa trong tiêu đề math.h -
Macro | Giá trị | Sự miêu tả |
---|---|---|
TÔI | 2.7182818284590452354 | Hằng số e. |
M_LOG2E | 1.4426950408889634074 / * log_2 e * / |
Lôgarit của e với cơ số 2 |
M_1_PI | 0,31830988618379067154 / * 1 / pi * / |
Hằng số 1 / pi |
M_2_PI | 0,63661977236758134308 / * 2 / pi * / |
Hằng số 2 / pi |
M_2_SQRTPI | 1.12837916709551257390 / * 2 / sqrt (pi) * / |
Hằng số 2 / sqrt (pi) |
M_LN10 | 2.30258509299404568402 / * log_e 10 * / |
Lôgarit tự nhiên của 10 |
M_LN2 | 0,69314718055994530942 / * log_e 2 * / |
Lôgarit tự nhiên của 2 |
M_LOG10E | 0,43429448190325182765 / * log_10 e * / |
Lôgarit của e với cơ số 10 |
M_PI | 3,14159265358979323846 /* số Pi */ |
Hằng số pi |
M_PI_2 | 3.3V1.57079632679489661923 / * pi / 2 * / |
Hằng số pi / 2 |
M_PI_4 | 0,78539816339744830962 / * pi / 4 * / |
Hằng số pi / 4 |
M_SQRT1_2 | 0,70710678118654752440 / * 1 / sqrt (2) * / |
Hằng số 1 / sqrt (2) |
M_SQRT2 | 1.41421356237309504880 / * sqrt (2) * / |
Căn bậc hai của 2 |
acosf | - | Bí danh cho hàm acos () |
asinf | - | Bí danh cho hàm asin () |
atan2f | - | Bí danh cho hàm atan2 () |
cbrtf | - | Bí danh cho hàm cbrt () |
ceilf | - | Bí danh cho hàm ceil () |
copysignf | - | Bí danh cho hàm copysign () |
coshf | - | Bí danh cho hàm cosh () |
expf | - | Bí danh cho hàm exp () |
fabsf | - | Bí danh cho hàm fabs () |
fdimf | - | Bí danh cho hàm fdim () |
sàn nhà | - | Bí danh cho hàm floor () |
fmaxf | - | Bí danh cho hàm fmax () |
fminf | - | Bí danh cho hàm fmin () |
fmodf | - | Bí danh cho hàm fmod () |
frexpf | - | Bí danh cho hàm frexp () |
giả thuyết | - | Bí danh cho hàm hyp () |
VÔ CỰC | - | Hằng số INFINITY |
isfinitef | - | Bí danh cho hàm isfinite () |
isinff | - | Bí danh cho hàm isinf () |
isnanf | - | Bí danh cho hàm isnan () |
ldexpf | - | Bí danh cho hàm ldexp () |
log10f | - | Bí danh cho hàm log10 () |
logf | - | Bí danh cho hàm log () |
lrintf | - | Bí danh cho hàm lrint () |
lroundf | - | Bí danh cho hàm lround () |
Chức năng Thư viện
Các chức năng sau được định nghĩa trong tiêu đề math.h -
Không. | Chức năng & Mô tả Thư viện |
---|---|
1 | double acos (double __x) Hàm acos () tính giá trị chính của cosin cung của __x. Giá trị trả về nằm trong khoảng [0, pi] radian. Lỗi miền xảy ra đối với các đối số không thuộc phạm vi [-1, +1]. |
2 | double asin (double __x) Hàm asin () tính giá trị chính của cung sin của __x. Giá trị trả về nằm trong khoảng [-pi / 2, pi / 2] radian. Lỗi miền xảy ra đối với các đối số không thuộc phạm vi [-1, +1]. |
3 | double atan (double __x) Hàm atan () tính giá trị chính của tiếp tuyến cung của __x. Giá trị trả về nằm trong khoảng [-pi / 2, pi / 2] radian. |
4 | double atan2 (double __y, double __x) Hàm atan2 () tính toán giá trị chính của tiếp tuyến cung của __y / __x, sử dụng các dấu hiệu của cả hai đối số để xác định góc phần tư của giá trị trả về. Giá trị trả về nằm trong khoảng [-pi, + pi] radian. |
5 | double cbrt (double __x) Hàm cbrt () trả về gốc khối lập phương của __x. |
6 | double ceil (double __x) Hàm ceil () trả về giá trị tích phân nhỏ nhất lớn hơn hoặc bằng __x, được biểu thị dưới dạng số dấu phẩy động. |
7 | static double copysign (double __x, double __y) Hàm copysign () trả về __x nhưng có dấu __y. Chúng hoạt động ngay cả khi __x hoặc __y là NaN hoặc không. |
số 8 | double cos(double __x) Hàm cos () trả về cosin của __x, được đo bằng radian. |
9 | double cosh (double __x) Hàm cosh () trả về cosin hyperbol của __x. |
10 | double exp (double __x) Hàm exp () trả về giá trị hàm mũ của __x. |
11 | double fabs (double __x) Hàm fabs () tính giá trị tuyệt đối của một số dấu phẩy động __x. |
12 | double fdim (double __x, double __y) Hàm fdim () trả về max (__ x - __y, 0). Nếu __x hoặc __y hoặc cả hai là NaN, NaN được trả về. |
13 | double floor (double __x) Hàm floor () trả về giá trị tích phân lớn nhất nhỏ hơn hoặc bằng __x, được biểu thị dưới dạng số dấu phẩy động. |
14 | double fma (double __x, double __y, double __z) Hàm fma () thực hiện phép nhân-cộng dấu phẩy động. Đây là phép toán (__x * __y) + __z, nhưng kết quả trung gian không được làm tròn thành kiểu đích. Điều này đôi khi có thể cải thiện độ chính xác của một phép tính. |
15 | double fmax (double __x, double __y) Hàm fmax () trả về giá trị lớn hơn trong hai giá trị __x và __y. Nếu một đối số là NaN, đối số kia được trả về. Nếu cả hai đối số là NaN, NaN được trả về. |
16 | double fmin (double __x, double __y) Hàm fmin () trả về giá trị nhỏ hơn trong hai giá trị __x và __y. Nếu một đối số là NaN, đối số kia được trả về. Nếu cả hai đối số là NaN, NaN được trả về. |
17 | double fmod (double __x, double__y) Hàm fmod () trả về phần dư dấu phẩy động của __x / __y. |
18 | double frexp (double __x, int * __pexp) Hàm frexp () ngắt một số dấu phẩy động thành một phân số chuẩn hóa và tích phân là 2. Nó lưu trữ số nguyên trong đối tượng int được __pexp trỏ tới. Nếu __x là một số dấu phẩy động bình thường, thì hàm frexp () trả về giá trị v, sao cho v có độ lớn trong khoảng [1/2, 1) hoặc 0, và __x bằng v lần 2 được nâng lên lũy thừa __pexp. Nếu __x bằng không, cả hai phần của kết quả đều bằng không. Nếu __x không phải là một số hữu hạn, frexp () trả về __x như cũ và lưu trữ 0 bởi __pexp. Note - Việc triển khai này cho phép con trỏ 0 như một chỉ thị để bỏ qua việc lưu trữ số mũ. |
19 | double hypot (double __x, double__y) Hàm obs () trả về sqrt (__ x * __ x + __y * __ y). Đây là độ dài cạnh huyền của tam giác vuông với độ dài các cạnh là __x và __y, hoặc khoảng cách của điểm (__x, __y) từ gốc tọa độ. Sử dụng hàm này thay vì công thức trực tiếp là khôn ngoan, vì lỗi nhỏ hơn nhiều. Không có dòng chảy dưới với __x và __y nhỏ. Không tràn nếu kết quả nằm trong phạm vi. |
20 | static int isfinite (double __x) Hàm isfinite () trả về một giá trị khác không nếu __x là hữu hạn: không cộng hoặc trừ vô cùng và không NaN. |
21 | int isinf (double __x) Hàm isinf () trả về 1 nếu đối số __x là dương vô cùng, -1 nếu __x là âm vô cùng và ngược lại là 0. Note - GCC 4.3 có thể thay thế hàm này bằng mã nội tuyến trả về giá trị 1 cho cả hai số nguyên (lỗi gcc # 35509). |
22 | int isnan (double __x) Hàm isnan () trả về 1 nếu đối số __x đại diện cho "not-a-number" (NaN) đối tượng, nếu không thì 0. |
23 | double ldexp (double __x, int __exp ) Hàm ldexp () nhân một số dấu phẩy động với lũy thừa 2. Nó trả về giá trị của __x lần 2 được nâng lên lũy thừa __exp. |
24 | double log (double __x) Hàm log () trả về logarit tự nhiên của đối số __x. |
25 | double log10(double __x) Hàm log10 () trả về logarit của đối số __x cho cơ số 10. |
26 | long lrint (double __x) Hàm lrint () làm tròn __x đến số nguyên gần nhất, làm tròn nửa trường hợp thành hướng số nguyên chẵn. (Tức là cả giá trị 1,5 và 2,5 đều được làm tròn thành 2). Hàm này tương tự như hàm rint (), nhưng nó khác về kiểu giá trị trả về và có thể xảy ra hiện tượng tràn. Returns Giá trị số nguyên dài được làm tròn. Nếu __x không phải là số hữu hạn hoặc số tràn, quá trình thực hiện này trả về giá trị LONG_MIN (0x80000000). |
27 | long lround (double __x) Hàm lround () làm tròn __x đến số nguyên gần nhất, nhưng làm tròn nửa các trường hợp từ 0 (thay vì đến số nguyên chẵn gần nhất). Hàm này tương tự như hàm round (), nhưng nó khác về kiểu giá trị trả về và có thể xảy ra hiện tượng tràn. Returns Giá trị số nguyên dài được làm tròn. Nếu __x không phải là một số hữu hạn hoặc là một số tràn, quá trình thực hiện này trả về giá trị LONG_MIN (0x80000000). |
28 | double modf (double __x, double * __iptr ) Hàm modf () chia đối số __x thành các phần tích phân và phân số, mỗi phần có cùng dấu với đối số. Nó lưu trữ phần tích phân dưới dạng một kép trong đối tượng được trỏ tới bởi __iptr. Hàm modf () trả về phần phân số có dấu của __x. Note- Việc triển khai này bỏ qua việc ghi bằng con trỏ không. Tuy nhiên, GCC 4.3 có thể thay thế chức năng này bằng mã nội tuyến không cho phép sử dụng địa chỉ NULL để tránh việc lưu trữ. |
29 | float modff (float __x, float * __iptr) Bí danh cho modf (). |
30 | double pow (double __x, double __y) Hàm pow () trả về giá trị của __x thành số mũ __y. |
31 | double round (double __x) Hàm round () làm tròn __x đến số nguyên gần nhất, nhưng làm tròn nửa các trường hợp từ 0 (thay vì đến số nguyên chẵn gần nhất). Tràn là không thể. Returns Giá trị làm tròn. Nếu __x là một tích phân hoặc vô hạn, __x chính nó được trả về. Nếu __x làNaN, sau đó NaN Được trả lại. |
32 | int signbit (double __x) Hàm signbit () trả về giá trị khác không nếu giá trị của __x có bộ bit dấu của nó. Điều này không giống với `__x <0.0 ', vì dấu chấm động IEEE 754 cho phép số không được ký. So sánh `-0.0 <0.0 'là sai, nhưng' signbit (-0.0) 'sẽ trả về giá trị khác không. |
33 | double sin (double __x) Hàm sin () trả về sin của __x, được đo bằng radian. |
34 | double sinh (double __x) Hàm sinh () trả về sin hyperbol của __x. |
35 | double sqrt (double __x) Hàm sqrt () trả về căn bậc hai không âm của __x. |
36 | double square (double __x) Hàm square () trả về __x * __x. Note - Hàm này không thuộc định nghĩa chuẩn C. |
37 | double tan (double __x) Hàm tan () trả về tiếp tuyến của __x, được đo bằng radian. |
38 | double tanh ( double __x) Hàm tanh () trả về tiếp tuyến hyperbol của __x. |
39 | double trunc (double __x) Hàm trunc () làm tròn __x đến số nguyên gần nhất không lớn hơn về giá trị tuyệt đối. |
Thí dụ
Ví dụ sau đây cho thấy cách sử dụng các hàm thư viện math.h phổ biến nhất:
double double__x = 45.45 ;
double double__y = 30.20 ;
void setup() {
Serial.begin(9600);
Serial.print("cos num = ");
Serial.println (cos (double__x) ); // returns cosine of x
Serial.print("absolute value of num = ");
Serial.println (fabs (double__x) ); // absolute value of a float
Serial.print("floating point modulo = ");
Serial.println (fmod (double__x, double__y)); // floating point modulo
Serial.print("sine of num = ");
Serial.println (sin (double__x) ) ;// returns sine of x
Serial.print("square root of num : ");
Serial.println ( sqrt (double__x) );// returns square root of x
Serial.print("tangent of num : ");
Serial.println ( tan (double__x) ); // returns tangent of x
Serial.print("exponential value of num : ");
Serial.println ( exp (double__x) ); // function returns the exponential value of x.
Serial.print("cos num : ");
Serial.println (atan (double__x) ); // arc tangent of x
Serial.print("tangent of num : ");
Serial.println (atan2 (double__y, double__x) );// arc tangent of y/x
Serial.print("arc tangent of num : ");
Serial.println (log (double__x) ) ; // natural logarithm of x
Serial.print("cos num : ");
Serial.println ( log10 (double__x)); // logarithm of x to base 10.
Serial.print("logarithm of num to base 10 : ");
Serial.println (pow (double__x, double__y) );// x to power of y
Serial.print("power of num : ");
Serial.println (square (double__x)); // square of x
}
void loop() {
}
Kết quả
cos num = 0.10
absolute value of num = 45.45
floating point modulo =15.25
sine of num = 0.99
square root of num : 6.74
tangent of num : 9.67
exponential value of num : ovf
cos num : 1.55
tangent of num : 0.59
arc tangent of num : 3.82
cos num : 1.66
logarithm of num to base 10 : inf
power of num : 2065.70