Arduino數(shù)學(xué)庫(math.h)包含了許多用于操作浮點(diǎn)數(shù)的有用的數(shù)學(xué)函數(shù)。
以下是在標(biāo)題math.h中定義的宏:
宏 | 值 | 描述 |
---|---|---|
M_E | 2.7182818284590452354 | 常數(shù)e。 |
M_LOG2E | 1.4426950408889634074 /* log_2 e */ | e以2為底的對數(shù)。 |
M_1_PI | 0.31830988618379067154 /* 1/pi */ | 常數(shù)1/pi。 |
M_2_PI | 0.63661977236758134308 /* 2/pi */ | 常數(shù)2/pi。 |
M_2_SQRTPI | 1.12837916709551257390 /* 2/sqrt(pi) */ | 常數(shù)2/sqrt(pi)。 |
M_LN10 | 2.30258509299404568402 /* log_e 10 */ | 10的自然對數(shù)。 |
M_LN2 | 0.69314718055994530942 /* log_e 2 */ | 2的自然對數(shù)。 |
M_LOG10E | 0.43429448190325182765 /* log_10 e */ | e以10為底的對數(shù)。 |
M_PI | 3.14159265358979323846 /* pi */ | 常數(shù)pi。 |
M_PI_2 | 3.3V1.57079632679489661923 /* pi/2 */ | 常數(shù)pi/2。 |
M_PI_4 | 0.78539816339744830962 /* pi/4 */ | 常數(shù)pi/4。 |
M_SQRT1_2 | 0.70710678118654752440 /* 1/sqrt(2) */ | 常數(shù)1/sqrt(2)。 |
M_SQRT2 | 1.41421356237309504880 /* sqrt(2) */ | 2的平方根。 |
acosf | - | acos()函數(shù)的別名。 |
asinf | - | asin()函數(shù)的別名。 |
atan2f | - | atan2()函數(shù)的別名。 |
cbrtf | - | cbrt()函數(shù)的別名。 |
ceilf | - | ceil()函數(shù)的別名。 |
copysignf | - | copysign()函數(shù)的別名。 |
coshf | - | cosh()函數(shù)的別名。 |
expf | - | exp()函數(shù)的別名。 |
fabsf | - | fabs()函數(shù)的別名。 |
fdimf | - | fdim()函數(shù)的別名。 |
floorf | - | floor()函數(shù)的別名。 |
fmaxf | - | fmax()函數(shù)的別名。 |
fminf | - | fmin()函數(shù)的別名。 |
fmodf | - | fmod()函數(shù)的別名。 |
frexpf | - | frexp()函數(shù)的別名。 |
hypotf | - | hypot()函數(shù)的別名。 |
INFINITY | - | 無窮大常量。 |
isfinitef | - | isfinite()函數(shù)的別名。 |
isinff | - | isinf()函數(shù)的別名。 |
isnanf | - | isnan()函數(shù)的別名。 |
ldexpf | - | ldexp()函數(shù)的別名。 |
log10f | - | log10()函數(shù)的別名。 |
logf | - | log()函數(shù)的別名。 |
lrintf | - | lrint()函數(shù)的別名。 |
lroundf | - | lround()函數(shù)的別名。 |
以下函數(shù)在標(biāo)題 math.h 中定義:
序號 | 庫函數(shù)和描述 |
---|---|
1 | double acos (double __x) acos()函數(shù)計(jì)算x的反余弦的主值。返回值在[0, pi]弧度的范圍內(nèi)。不在[-1, +1]范圍內(nèi)的參數(shù)會發(fā)生域錯誤。 |
2 | double asin (double __x) asin()函數(shù)計(jì)算x的反正弦的主值。返回值在[-pi/2, pi/2]弧度的范圍內(nèi)。不在[-1, +1]范圍內(nèi)的參數(shù)會發(fā)生域錯誤。 |
3 | double atan (double __x) atan()函數(shù)計(jì)算x的反正切的主值。返回值在[-pi/2, pi/2]弧度的范圍內(nèi)。 |
4 | double atan2 (double __y, double __x) atan2()函數(shù)計(jì)算y/x的反正切的主值,使用兩個(gè)參數(shù)的符號來確定返回值的象限。返回值在[-pi, +pi]弧度的范圍內(nèi)。 |
5 | double cbrt (double __x) cbrt()函數(shù)返回x的立方根值。 |
6 | double ceil (double __x) ceil()函數(shù)返回大于或等于x的最小整數(shù)值,以浮點(diǎn)數(shù)表示。 |
7 | static double copysign (double __x, double __y) copysign()函數(shù)返回x,但帶有y的符號。即使x或y是NaN或零,他們也可以工作。 |
8 | double cos(double __x) cos()函數(shù)返回x的余弦,以弧度為單位。 |
9 | double cosh (double __x) cosh()函數(shù)返回x的雙曲余弦。 |
10 | double exp (double __x) exp()返回e的x次冪的值。 |
11 | double fabs (double __x) fabs()函數(shù)計(jì)算浮點(diǎn)數(shù)x的絕對值。 |
12 | double fdim (double __x, double __y) fdim()函數(shù)返回max(x - y, 0)。如果x或y或者兩者都是NaN,則返回NaN。 |
13 | double floor (double __x) floor()函數(shù)返回小于或等于x的最大整數(shù)值,以浮點(diǎn)數(shù)表示。 |
14 | double fma (double __x, double __y, double __z) fma()函數(shù)執(zhí)行浮點(diǎn)乘加,即運(yùn)算(x * y) + z,但是中間結(jié)果不會四舍五入到目標(biāo)類型。這有時(shí)可以提高計(jì)算的精度。 |
15 | double fmax (double __x, double __y) fmax()函數(shù)返回兩個(gè)值x和y中較大的一個(gè)。如果一個(gè)參數(shù)是NaN,則返回另一個(gè)參數(shù)。如果兩個(gè)參數(shù)都是NaN,則返回NaN。 |
16 | double fmin (double __x, double __y) fmin()函數(shù)返回兩個(gè)值x和y中較小的一個(gè)。如果一個(gè)參數(shù)是NaN,則返回另一個(gè)參數(shù)。如果兩個(gè)參數(shù)都是NaN,則返回NaN。 |
17 | double fmod (double __x, double__y) fmod()函數(shù)返回x / y的余數(shù)。 |
18 | double frexp (double __x, int * __pexp) frexp()函數(shù)將浮點(diǎn)數(shù)分解為規(guī)格化分?jǐn)?shù)和2的整次冪。它將整數(shù)存儲在pexp指向的int對象中。如果x是一個(gè)正常的浮點(diǎn)數(shù),則frexp()函數(shù)返回值v,使得v具有區(qū)間[1/2, 1)或零的量值,而x等于v乘以2的pexp次冪。如果x是零,那么結(jié)果的兩個(gè)部分都是零。如果x不是有限數(shù)字,frexp()將按原樣返回x,并通過pexp存儲0。 注意 ? 這個(gè)實(shí)現(xiàn)允許一個(gè)零指針作為指令來跳過存儲指數(shù)。 |
19 | double hypot (double __x, double__y) hypot()函數(shù)返回sqrt(x*x + y*y)。這是一個(gè)邊長為x和y的直角三角形的斜邊的長度,或點(diǎn)(x, y)距離原點(diǎn)的距離。使用這個(gè)函數(shù)而不是直接使用公式是比較明智的,因?yàn)檎`差要小得多。x和y沒有下溢。如果結(jié)果在范圍內(nèi),則不會溢出。 |
20 | static int isfinite (double __x) 如果x是有限的,isfinite()函數(shù)返回一個(gè)非零值:不是正或負(fù)無窮,也不是NaN。 |
21 | int isinf (double __x) 如果參數(shù)x是正無窮大,則函數(shù)isinf()返回1;如果x是負(fù)無窮大,則返回-1,否則返回0。 注意 ? GCC 4.3可以用內(nèi)聯(lián)代碼替換這個(gè)函數(shù),這個(gè)代碼對兩個(gè)無窮大返回1值(gcc bug #35509)。 |
22 | int isnan (double __x) 如果參數(shù)x表示“非數(shù)字”(NaN)對象,則函數(shù)isnan()返回1,否則返回0。 |
23 | double ldexp (double __x, int __exp ) ldexp()函數(shù)將浮點(diǎn)數(shù)乘以2的整數(shù)次冪。它返回x乘以2的exp次冪的值。 |
24 | double log (double __x) log()函數(shù)返回參數(shù)x的自然對數(shù)。 |
25 | double log10(double __x) log10()函數(shù)返回參數(shù)x的對數(shù),以10為基數(shù)。 |
26 | long lrint (double __x) lrint()函數(shù)將x四舍五入到最近的整數(shù),將中間情況舍入到偶數(shù)整數(shù)方向(例如,1.5和2.5的值都舍入到2)。這個(gè)函數(shù)類似于rint()函數(shù),但是它的返回值類型不同,并且有可能溢出。 返回 四舍五入的長整數(shù)值。如果x不是有限數(shù)字或者溢出,則此實(shí)現(xiàn)返回LONG_MIN值(0x80000000)。 |
27 | long lround (double __x) lround()將函數(shù)將x四舍五入到最近的整數(shù),但中間情況不舍入到0(不是到最近的偶數(shù)整數(shù))。這個(gè)函數(shù)類似于round()函數(shù),但是它的返回值的類型是不同的,并且有可能溢出。 返回 四舍五入的長整數(shù)值。如果x不是有限數(shù)字或者溢出,則此實(shí)現(xiàn)返回LONG_MIN值(0x80000000)。 |
28 | double modf (double __x, double * __iptr ) modf()函數(shù)將參數(shù)x分解為整數(shù)部分和小數(shù)部分,每個(gè)部分都與參數(shù)具有相同的符號。它在iptr指向的對象中將整數(shù)部分存儲為double。 modf()函數(shù)返回x的有符號小數(shù)部分。 注意 ? 這個(gè)實(shí)現(xiàn)跳過零指針的寫入。但是,GCC 4.3可以用內(nèi)聯(lián)代碼替換這個(gè)函數(shù),不允許使用NULL地址來避免存儲。 |
29 | float modff (float __x, float * __iptr) modf()函數(shù)的別名。 |
30 | double pow (double __x, double __y) pow()函數(shù)返回x的y次冪。 |
31 | double round (double __x) round()函數(shù)將x四舍五入到最近的整數(shù),但中間情況不舍入到0(不是到最近的偶數(shù)整數(shù))。不可能會溢出。 返回 四舍五入的值。如果x是整數(shù)或無窮大,則返回x本身。如果x是NaN,則返回NaN。 |
32 | int signbit (double __x) 如果x的值設(shè)置了符號位,signbit()函數(shù)將返回一個(gè)非零值。這與“x < 0.0”不同,因?yàn)镮EEE 754浮點(diǎn)允許零署名。比較“-0.0 < 0.0”是錯的,但“signbit (-0.0)”會返回一個(gè)非零值。 |
33 | double sin (double __x) sin()函數(shù)返回x的正弦值,以弧度為單位。 |
34 | double sinh (double __x) sinh()函數(shù)返回x的雙曲正弦。 |
35 | double sqrt (double __x) sqrt()函數(shù)返回x的非負(fù)平方根。 |
36 | double square (double __x) square()函數(shù)返回x * x。 注意 ? 此函數(shù)不屬于C標(biāo)準(zhǔn)定義。 |
37 | double tan (double __x) tan()函數(shù)返回x的正切值,以弧度為單位。 |
38 | double tanh ( double __x) tanh()函數(shù)返回x的雙曲正切。 |
39 | double trunc (double __x) trunc()函數(shù)將x四舍五入為最近的整數(shù),不大于絕對值。 |
以下示例顯示如何使用最常用的math.h庫函數(shù):
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() { }
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
更多建議: