Arduino - biblioteka matematyczna
Biblioteka Arduino Math (math.h) zawiera szereg przydatnych funkcji matematycznych do manipulowania liczbami zmiennoprzecinkowymi.
Biblioteka makr
Poniżej znajdują się makra zdefiniowane w nagłówku math.h -
Makra | Wartość | Opis |
---|---|---|
MNIE | 2.7182818284590452354 | Stała e. |
M_LOG2E | 1.4426950408889634074 / * log_2 e * / |
Logarytm e o podstawie 2 |
M_1_PI | 0.31830988618379067154 / * 1 / pi * / |
Stała 1 / pi |
M_2_PI | 0.63661977236758134308 / * 2 / pi * / |
Stała 2 / pi |
M_2_SQRTPI | 1.12837916709551257390 / * 2 / sqrt (pi) * / |
Stała 2 / sqrt (pi) |
M_LN10 | 2.30258509299404568402 / * log_e 10 * / |
Logarytm naturalny z 10 |
M_LN2 | 0.69314718055994530942 / * log_e 2 * / |
Logarytm naturalny funkcji 2 |
M_LOG10E | 0.43429448190325182765 / * log_10 e * / |
Logarytm e do podstawy 10 |
M_PI | 3.14159265358979323846 /* Liczba Pi */ |
Stała pi |
M_PI_2 | 3,3V1,57079632679489661923 / * pi / 2 * / |
Stała pi / 2 |
M_PI_4 | 0.78539816339744830962 / * pi / 4 * / |
Stała pi / 4 |
M_SQRT1_2 | 0.70710678118654752440 / * 1 / sqrt (2) * / |
Stała 1 / sqrt (2) |
M_SQRT2 | 1.41421356237309504880 / * sqrt (2) * / |
Pierwiastek kwadratowy z 2 |
acosf | - | Alias funkcji acos () |
asinf | - | Alias funkcji asin () |
atan2f | - | Alias funkcji atan2 () |
cbrtf | - | Alias funkcji cbrt () |
ceilf | - | Alias funkcji ceil () |
copysignf | - | Alias funkcji copysign () |
coshf | - | Alias funkcji cosh () |
expf | - | Alias funkcji exp () |
fabsf | - | Alias funkcji fabs () |
fdimf | - | Alias funkcji fdim () |
piętro | - | Alias funkcji floor () |
fmaxf | - | Alias funkcji fmax () |
fminf | - | Alias funkcji fmin () |
fmodf | - | Alias funkcji fmod () |
frexpf | - | Alias funkcji frexp () |
hypotf | - | Alias funkcji hypot () |
NIESKOŃCZONOŚĆ | - | INFINITY stała |
isfinitef | - | Alias funkcji isfinite () |
isinff | - | Alias funkcji isinf () |
isnanf | - | Alias funkcji isnan () |
ldexpf | - | Alias funkcji ldexp () |
log10f | - | Alias funkcji log10 () |
logf | - | Alias funkcji log () |
lrintf | - | Alias funkcji lrint () |
lroundf | - | Alias funkcji lround () |
Funkcje biblioteki
W nagłówku zdefiniowano następujące funkcje math.h -
S.No. | Funkcja i opis biblioteki |
---|---|
1 | double acos (double __x) Funkcja acos () oblicza główną wartość arcus cosinus z __x. Zwrócona wartość mieści się w zakresie [0, pi] radianów. W przypadku argumentów spoza zakresu [-1, +1] występuje błąd domeny. |
2 | double asin (double __x) Funkcja asin () oblicza główną wartość łuku sinusoidalnego z __x. Zwrócona wartość mieści się w zakresie [-pi / 2, pi / 2] radianów. W przypadku argumentów spoza zakresu [-1, +1] występuje błąd domeny. |
3 | double atan (double __x) Funkcja atan () oblicza główną wartość tangensa łuku __x. Zwrócona wartość mieści się w zakresie [-pi / 2, pi / 2] radianów. |
4 | double atan2 (double __y, double __x) Funkcja atan2 () oblicza główną wartość stycznej łuku z __y / __x, używając znaków obu argumentów do określenia kwadrantu zwracanej wartości. Zwrócona wartość mieści się w zakresie [-pi, + pi] radianów. |
5 | double cbrt (double __x) Funkcja cbrt () zwraca pierwiastek sześcienny z __x. |
6 | double ceil (double __x) Funkcja ceil () zwraca najmniejszą wartość całkowitą większą lub równą __x, wyrażoną jako liczba zmiennoprzecinkowa. |
7 | static double copysign (double __x, double __y) Funkcja copysign () zwraca __x, ale ze znakiem __y. Działają nawet wtedy, gdy __x lub __y to NaN lub zero. |
8 | double cos(double __x) Funkcja cos () zwraca cosinus funkcji __x mierzony w radianach. |
9 | double cosh (double __x) Funkcja cosh () zwraca hiperboliczny cosinus z __x. |
10 | double exp (double __x) Funkcja exp () zwraca wykładniczą wartość __x. |
11 | double fabs (double __x) Funkcja fabs () oblicza wartość bezwzględną liczby zmiennoprzecinkowej __x. |
12 | double fdim (double __x, double __y) Funkcja fdim () zwraca wartość max (__ x - __y, 0). Jeśli __x lub __y lub oba mają wartość NaN, zwracany jest NaN. |
13 | double floor (double __x) Funkcja floor () zwraca największą wartość całkowitą mniejszą lub równą __x, wyrażoną jako liczba zmiennoprzecinkowa. |
14 | double fma (double __x, double __y, double __z) Funkcja fma () wykonuje wielokrotne dodawanie zmiennoprzecinkowe. To jest operacja (__x * __y) + __z, ale wynik pośredni nie jest zaokrąglany do typu docelowego. Może to czasami poprawić precyzję obliczeń. |
15 | double fmax (double __x, double __y) Funkcja fmax () zwraca większą z dwóch wartości __x i __y. Jeśli argument ma wartość NaN, zwracany jest drugi argument. Jeśli oba argumenty mają wartość NaN, zwracany jest NaN. |
16 | double fmin (double __x, double __y) Funkcja fmin () zwraca mniejszą z dwóch wartości __x i __y. Jeśli argument ma wartość NaN, zwracany jest drugi argument. Jeśli oba argumenty mają wartość NaN, zwracany jest NaN. |
17 | double fmod (double __x, double__y) Funkcja fmod () zwraca zmiennoprzecinkową resztę z __x / __y. |
18 | double frexp (double __x, int * __pexp) Funkcja frexp () dzieli liczbę zmiennoprzecinkową na znormalizowany ułamek i całkowitą potęgę 2. Przechowuje liczbę całkowitą w obiekcie int wskazywanym przez __pexp. Jeśli __x jest normalną liczbą zmiennoprzecinkową, funkcja frexp () zwraca wartość v, taką, że v ma wielkość w przedziale [1/2, 1) lub zero, a __x równa się v razy 2 podniesione do potęgi __pexp. Jeśli __x wynosi zero, obie części wyniku są równe zero. Jeśli __x nie jest liczbą skończoną, funkcja frexp () zwraca __x bez zmian i przechowuje 0 do __pexp. Note - Ta implementacja zezwala na zerowy wskaźnik jako dyrektywę do pominięcia przechowującego wykładnika. |
19 | double hypot (double __x, double__y) Funkcja hypot () zwraca sqrt (__ x * __ x + __y * __ y). Jest to długość przeciwprostokątnej trójkąta prostokątnego o bokach o długości __x i __y lub odległość punktu (__x, __y) od początku. Używanie tej funkcji zamiast bezpośredniego wzoru jest rozsądne, ponieważ błąd jest znacznie mniejszy. Brak niedomiaru z małymi __x i __y. Brak przepełnienia, jeśli wynik jest w zakresie. |
20 | static int isfinite (double __x) Funkcja isfinite () zwraca wartość różną od zera, jeśli __x jest skończone: nie plus lub minus nieskończoność i nie NaN. |
21 | int isinf (double __x) Funkcja isinf () zwraca 1, jeśli argument __x jest dodatnią nieskończonością, -1 jeśli __x jest ujemną nieskończonością, a 0 w przeciwnym razie. Note - GCC 4.3 może zastąpić tę funkcję wbudowanym kodem, który zwraca wartość 1 dla obu nieskończoności (błąd gcc nr 35509). |
22 | int isnan (double __x) Funkcja isnan () zwraca 1, jeśli argument __x reprezentuje „nie-liczbę” (NaN), w przeciwnym razie 0. |
23 | double ldexp (double __x, int __exp ) Funkcja ldexp () mnoży liczbę zmiennoprzecinkową przez całkowitą potęgę 2. Zwraca wartość __x razy 2 podniesioną do potęgi __exp. |
24 | double log (double __x) Funkcja log () zwraca logarytm naturalny argumentu __x. |
25 | double log10(double __x) Funkcja log10 () zwraca logarytm argumentu __x o podstawie 10. |
26 | long lrint (double __x) Funkcja lrint () zaokrągla __x do najbliższej liczby całkowitej, zaokrąglając przypadki w połowie długości do kierunku liczby parzystej. (Oznacza to, że wartości 1,5 i 2,5 są zaokrąglane do 2). Ta funkcja jest podobna do funkcji rint (), ale różni się typem zwracanej wartości i tym, że możliwe jest przepełnienie. Returns Długa liczba całkowita w zaokrągleniu. Jeśli __x nie jest liczbą skończoną lub przepełnieniem, ta realizacja zwraca wartość LONG_MIN (0x80000000). |
27 | long lround (double __x) Funkcja lround () zaokrągla __x do najbliższej liczby całkowitej, ale zaokrągla przypadki w połowie odległości od zera (zamiast do najbliższej parzystej liczby całkowitej). Ta funkcja jest podobna do funkcji round (), ale różni się typem zwracanej wartości i tym, że możliwe jest przepełnienie. Returns Długa liczba całkowita w zaokrągleniu. Jeśli __x nie jest liczbą skończoną lub wystąpiło przepełnienie, ta realizacja zwraca wartość LONG_MIN (0x80000000). |
28 | double modf (double __x, double * __iptr ) Funkcja modf () dzieli argument __x na części całkowite i ułamkowe, z których każda ma ten sam znak co argument. Przechowuje część integralną jako podwójną w obiekcie wskazywanym przez __iptr. Funkcja modf () zwraca część ułamkową __x ze znakiem. Note- Ta implementacja pomija pisanie przez wskaźnik zerowy. Jednak GCC 4.3 może zastąpić tę funkcję kodem wbudowanym, który nie pozwala na użycie adresu NULL w celu uniknięcia przechowywania. |
29 | float modff (float __x, float * __iptr) Alias dla modf (). |
30 | double pow (double __x, double __y) Funkcja pow () zwraca wartość __x do wykładnika __y. |
31 | double round (double __x) Funkcja round () zaokrągla __x do najbliższej liczby całkowitej, ale zaokrągla przypadki w połowie odległości od zera (zamiast do najbliższej parzystej liczby całkowitej). Przelew jest niemożliwy. Returns Wartość zaokrąglona. Jeśli __x jest całką lub nieskończoną, zwracany jest sam __x. Jeśli __x jestNaN, następnie NaN jest zwracany. |
32 | int signbit (double __x) Funkcja signbit () zwraca wartość różną od zera, jeśli wartość __x ma ustawiony bit znaku. To nie to samo, co `__x <0.0 ', ponieważ zmiennoprzecinkowy IEEE 754 pozwala na podpisywanie zera. Porównanie „-0,0 <0,0” jest fałszywe, ale „signbit (-0,0)” zwróci wartość różną od zera. |
33 | double sin (double __x) Funkcja sin () zwraca sinus z __x, mierzony w radianach. |
34 | double sinh (double __x) Funkcja sinh () zwraca hiperboliczny sinus z __x. |
35 | double sqrt (double __x) Funkcja sqrt () zwraca nieujemny pierwiastek kwadratowy z __x. |
36 | double square (double __x) Funkcja square () zwraca __x * __x. Note - Ta funkcja nie należy do standardowej definicji C. |
37 | double tan (double __x) Funkcja tan () zwraca tangens __x, mierzony w radianach. |
38 | double tanh ( double __x) Funkcja tanh () zwraca hiperboliczną tangens z __x. |
39 | double trunc (double __x) Funkcja trunc () zaokrągla __x do najbliższej liczby całkowitej nie większej w wartości bezwzględnej. |
Przykład
Poniższy przykład pokazuje, jak używać najpopularniejszych funkcji biblioteki math.h -
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() {
}
Wynik
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