Arduino - Libreria matematica
La libreria Arduino Math (math.h) include una serie di utili funzioni matematiche per la manipolazione dei numeri in virgola mobile.
Macro di libreria
Di seguito sono riportate le macro definite nell'intestazione math.h -
Macro | Valore | Descrizione |
---|---|---|
ME | 2.7182818284590452354 | La costante e. |
M_LOG2E |
1.4426950408889634074 / * log_2 e * / |
Il logaritmo della e in base 2 |
M_1_PI | 0,31830988618379067154 / * 1 / pi * / |
La costante 1 / pi |
M_2_PI |
0.63661977236758134308 / * 2 / pi * / |
La costante 2 / pi |
M_2_SQRTPI |
1.12837916709551257390 / * 2 / sqrt (pi) * / |
La costante 2 / sqrt (pi) |
M_LN10 | 2.30258509299404568402 / * log_e 10 * / |
Il logaritmo naturale del 10 |
M_LN2 | 0.69314718055994530942 / * log_e 2 * / |
Il logaritmo naturale di 2 |
M_LOG10E | 0.43429448190325182765 / * log_10 e * / |
Il logaritmo della e in base 10 |
M_PI | 3.14159265358979323846 / * pi * / |
La costante pi greco |
M_PI_2 | 3.3V1.57079632679489661923 / * pi / 2 * / |
La costante pi / 2 |
M_PI_4 | 0.78539816339744830962 / * pi / 4 * / |
La costante pi / 4 |
M_SQRT1_2 | 0.70710678118654752440 / * 1 / sqrt (2) * / |
La costante 1 / sqrt (2) |
M_SQRT2 | 1.41421356237309504880 / * sqrt (2) * / |
La radice quadrata di 2 |
acosf | - | L'alias per la funzione acos () |
asinf | - | L'alias per la funzione asin () |
atan2f | - | L'alias per la funzione atan2 () |
cbrtf | - | L'alias per la funzione cbrt () |
ceilf | - | L'alias per la funzione ceil () |
copysignf | - | L'alias per la funzione copysign () |
coshf | - | L'alias per la funzione cosh () |
expf | - | L'alias per la funzione exp () |
fabsf | - | L'alias per la funzione fabs () |
fdimf | - | L'alias per la funzione fdim () |
floorf | - | L'alias per la funzione floor () |
fmaxf | - | L'alias per la funzione fmax () |
fminf | - | L'alias per la funzione fmin () |
fmodf | - | L'alias per la funzione fmod () |
frexpf | - | L'alias per la funzione frexp () |
ipotf | - | L'alias per la funzione hypot () |
INFINITO | - | Costante INFINITY |
isfinitef | - | L'alias per la funzione isfinite () |
isinff | - | L'alias per la funzione isinf () |
isnanf | - | L'alias per la funzione isnan () |
ldexpf | - | L'alias per la funzione ldexp () |
log10f | - | L'alias per la funzione log10 () |
logf | - | L'alias per la funzione log () |
lrintf | - | L'alias per la funzione lrint () |
lroundf | - | L'alias per la funzione lround () |
Funzioni di libreria
Le seguenti funzioni sono definite nell'intestazione math.h -
S.No. | Funzione e descrizione della libreria |
---|---|
1 |
double acos (double __x) La funzione acos () calcola il valore principale dell'arcocoseno di __x. Il valore restituito è compreso nell'intervallo [0, pi] radianti. Si verifica un errore di dominio per argomenti non compresi nell'intervallo [-1, +1]. |
2 |
double asin (double __x) La funzione asin () calcola il valore principale dell'arco seno di __x. Il valore restituito è compreso nell'intervallo [-pi / 2, pi / 2] radianti. Si verifica un errore di dominio per argomenti non compresi nell'intervallo [-1, +1]. |
3 |
double atan (double __x) La funzione atan () calcola il valore principale dell'arco tangente di __x. Il valore restituito è compreso nell'intervallo [-pi / 2, pi / 2] radianti. |
4 |
double atan2 (double __y, double __x) La funzione atan2 () calcola il valore principale dell'arco tangente di __y / __x, utilizzando i segni di entrambi gli argomenti per determinare il quadrante del valore restituito. Il valore restituito è compreso nell'intervallo [-pi, + pi] radianti. |
5 |
double cbrt (double __x) La funzione cbrt () restituisce la radice cubica di __x. |
6 |
double ceil (double __x) La funzione ceil () restituisce il valore integrale più piccolo maggiore o uguale a __x, espresso come numero a virgola mobile. |
7 |
static double copysign (double __x, double __y) La funzione copysign () restituisce __x ma con il segno __y. Funzionano anche se __x o __y sono NaN o zero. |
8 |
double cos(double __x) La funzione cos () restituisce il coseno di __x, misurato in radianti. |
9 |
double cosh (double __x) La funzione cosh () restituisce il coseno iperbolico di __x. |
10 |
double exp (double __x) La funzione exp () restituisce il valore esponenziale di __x. |
11 |
double fabs (double __x) La funzione fabs () calcola il valore assoluto di un numero a virgola mobile __x. |
12 |
double fdim (double __x, double __y) La funzione fdim () restituisce max (__ x - __y, 0). Se __x o __y o entrambi sono NaN, viene restituito NaN. |
13 |
double floor (double __x) La funzione floor () restituisce il valore integrale più grande minore o uguale a __x, espresso come numero in virgola mobile. |
14 |
double fma (double __x, double __y, double __z) La funzione fma () esegue la moltiplicazione-addizione in virgola mobile. Questa è l'operazione (__x * __y) + __z, ma il risultato intermedio non viene arrotondato al tipo di destinazione. Questo a volte può migliorare la precisione di un calcolo. |
15 |
double fmax (double __x, double __y) La funzione fmax () restituisce il maggiore dei due valori __x e __y. Se un argomento è NaN, viene restituito l'altro argomento. Se entrambi gli argomenti sono NaN, viene restituito NaN. |
16 |
double fmin (double __x, double __y) La funzione fmin () restituisce il minore dei due valori __x e __y. Se un argomento è NaN, viene restituito l'altro argomento. Se entrambi gli argomenti sono NaN, viene restituito NaN. |
17 |
double fmod (double __x, double__y) La funzione fmod () restituisce il resto in virgola mobile di __x / __y. |
18 |
double frexp (double __x, int * __pexp) La funzione frexp () spezza un numero in virgola mobile in una frazione normalizzata e una potenza integrale di 2. Memorizza il numero intero nell'oggetto int puntato da __pexp. Se __x è un normale numero in virgola mobile, la funzione frexp () restituisce il valore v, in modo tale che v abbia una grandezza nell'intervallo [1/2, 1) o zero, e __x è uguale a v volte 2 elevato alla potenza __pexp. Se __x è zero, entrambe le parti del risultato sono zero. Se __x non è un numero finito, frexp () restituisce __x così com'è e memorizza 0 per __pexp. Note - Questa implementazione consente a un puntatore zero come direttiva di saltare una memorizzazione dell'esponente. |
19 |
double hypot (double __x, double__y) La funzione hypot () restituisce sqrt (__ x * __ x + __y * __ y). Questa è la lunghezza dell'ipotenusa di un triangolo rettangolo con lati di lunghezza __x e __y, o la distanza del punto (__x, __y) dall'origine. Usare questa funzione al posto della formula diretta è saggio, poiché l'errore è molto più piccolo. Nessun underflow con __x e __y piccoli. Nessun overflow se il risultato è compreso nell'intervallo. |
20 |
static int isfinite (double __x) La funzione isfinite () restituisce un valore diverso da zero se __x è finito: non più o meno infinito e non NaN. |
21 |
int isinf (double __x) La funzione isinf () restituisce 1 se l'argomento __x è infinito positivo, -1 se __x è infinito negativo e 0 altrimenti. Note - GCC 4.3 può sostituire questa funzione con codice inline che restituisce il valore 1 per entrambi gli infiniti (bug gcc # 35509). |
22 |
int isnan (double __x) La funzione isnan () restituisce 1 se l'argomento __x rappresenta un "non-numero" (NaN) oggetto, altrimenti 0. |
23 |
double ldexp (double __x, int __exp ) La funzione ldexp () moltiplica un numero in virgola mobile per una potenza integrale di 2. Restituisce il valore di __x per 2 elevato alla potenza __exp. |
24 |
double log (double __x) La funzione log () restituisce il logaritmo naturale dell'argomento __x. |
25 |
double log10(double __x) La funzione log10 () restituisce il logaritmo dell'argomento __x in base 10. |
26 |
long lrint (double __x) La funzione lrint () arrotonda __x all'intero più vicino, arrotondando i casi a metà alla direzione dell'intero pari. (Vale a dire che entrambi i valori 1,5 e 2,5 vengono arrotondati a 2). Questa funzione è simile alla funzione rint (), ma differisce nel tipo di valore restituito e in quanto è possibile un overflow. Returns Il valore intero lungo arrotondato. Se __x non è un numero finito o un overflow, questa realizzazione restituisce il valore LONG_MIN (0x80000000). |
27 |
long lround (double __x) La funzione lround () arrotonda __x al numero intero più vicino, ma arrotonda i casi a metà allontanandosi da zero (invece che all'intero pari più vicino). Questa funzione è simile alla funzione round (), ma differisce nel tipo di valore restituito e in quanto è possibile un overflow. Returns Il valore intero lungo arrotondato. Se __x non è un numero finito o lo era un overflow, questa realizzazione restituisce il valore LONG_MIN (0x80000000). |
28 |
double modf (double __x, double * __iptr ) La funzione modf () divide l'argomento __x in parti integrali e frazionarie, ciascuna delle quali ha lo stesso segno dell'argomento. Memorizza la parte integrale come double nell'oggetto puntato da __iptr. La funzione modf () restituisce la parte frazionaria con segno di __x. Note- Questa implementazione salta la scrittura con puntatore zero. Tuttavia, GCC 4.3 può sostituire questa funzione con codice inline che non consente di utilizzare l'indirizzo NULL per evitare la memorizzazione. |
29 |
float modff (float __x, float * __iptr) L'alias di modf (). |
30 |
double pow (double __x, double __y) La funzione pow () restituisce il valore di __x all'esponente __y. |
31 |
double round (double __x) La funzione round () arrotonda __x al numero intero più vicino, ma arrotonda i casi a metà distanza da zero (invece che all'intero pari più vicino). Il trabocco è impossibile. Returns Il valore arrotondato. Se __x è un integrale o infinito, viene restituito __x stesso. Se __x èNaN, poi NaN viene restituito. |
32 |
int signbit (double __x) La funzione signbit () restituisce un valore diverso da zero se il valore di __x ha il bit di segno impostato. Non è la stessa cosa di `__x <0.0 ', perché la virgola mobile IEEE 754 consente il segno dello zero. Il confronto "-0.0 <0.0" è falso, ma "signbit (-0.0)" restituirà un valore diverso da zero. |
33 |
double sin (double __x) La funzione sin () restituisce il seno di __x, misurato in radianti. |
34 |
double sinh (double __x) La funzione sinh () restituisce il seno iperbolico di __x. |
35 |
double sqrt (double __x) La funzione sqrt () restituisce la radice quadrata non negativa di __x. |
36 |
double square (double __x) La funzione square () restituisce __x * __x. Note - Questa funzione non appartiene alla definizione dello standard C. |
37 |
double tan (double __x) La funzione tan () restituisce la tangente di __x, misurata in radianti. |
38 |
double tanh ( double __x) La funzione tanh () restituisce la tangente iperbolica di __x. |
39 |
double trunc (double __x) La funzione trunc () arrotonda __x al numero intero più vicino non maggiore in valore assoluto. |
Esempio
L'esempio seguente mostra come utilizzare le funzioni di libreria math.h più comuni:
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() {
}
Risultato
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