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