Arduino - Mathematikbibliothek

Die Arduino Math-Bibliothek (math.h) enthält eine Reihe nützlicher mathematischer Funktionen zum Bearbeiten von Gleitkommazahlen.

Bibliotheksmakros

Im Folgenden sind die in der Kopfzeile math.h definierten Makros aufgeführt.

Makros Wert Beschreibung
MICH 2.7182818284590452354 Die Konstante e.
M_LOG2E

1.4426950408889634074

/ * log_2 e * /

Der Logarithmus des e zur Basis 2
M_1_PI

0,31830988618379067154

/ * 1 / pi * /

Die Konstante 1 / pi
M_2_PI

0,63661977236758134308

/ * 2 / pi * /

Die Konstante 2 / pi
M_2_SQRTPI

1.12837916709551257390

/ * 2 / sqrt (pi) * /

Die Konstante 2 / sqrt (pi)
M_LN10

2.30258509299404568402

/ * log_e 10 * /

Der natürliche Logarithmus der 10
M_LN2

0,69314718055994530942

/ * log_e 2 * /

Der natürliche Logarithmus der 2
M_LOG10E

0,43429448190325182765

/ * log_10 e * /

Der Logarithmus des e zur Basis 10
M_PI

3.14159265358979323846

/ * pi * /

Die Konstante pi
M_PI_2

3.3V1.57079632679489661923

/ * pi / 2 * /

Die Konstante pi / 2
M_PI_4

0,78539816339744830962

/ * pi / 4 * /

Die Konstante pi / 4
M_SQRT1_2

0,70710678118654752440

/ * 1 / sqrt (2) * /

Die Konstante 1 / sqrt (2)
M_SQRT2

1.41421356237309504880

/ * sqrt (2) * /

Die Quadratwurzel von 2
acosf - - Der Alias ​​für die Funktion acos ()
asinf - - Der Alias ​​für asin () funktioniert
atan2f - - Der Alias ​​für die Funktion atan2 ()
cbrtf - - Der Alias ​​für die Funktion cbrt ()
Ceilf - - Der Alias ​​für Ceil () funktioniert
copysignf - - Der Alias ​​für die Funktion copysign ()
coshf - - Der Alias ​​für die Funktion cosh ()
expf - - Der Alias ​​für die Funktion exp ()
fabsf - - Der Alias ​​für fabs () funktioniert
fdimf - - Der Alias ​​für die Funktion fdim ()
floorf - - Der Alias ​​für die Funktion floor ()
fmaxf - - Der Alias ​​für die Funktion fmax ()
fminf - - Der Alias ​​für die Funktion fmin ()
fmodf - - Der Alias ​​für die Funktion fmod ()
frexpf - - Der Alias ​​für die Funktion frexp ()
hypotf - - Der Alias ​​für die Funktion hypot ()
UNENDLICHKEIT - - Unendlichkeitskonstante
isfinitef - - Der Alias ​​für die Funktion isfinite ()
isinff - - Der Alias ​​für die Funktion isinf ()
isnanf - - Der Alias ​​für die Funktion isnan ()
ldexpf - - Der Alias ​​für die Funktion ldexp ()
log10f - - Der Alias ​​für die Funktion log10 ()
logf - - Der Alias ​​für die Funktion log ()
lrintf - - Der Alias ​​für die Funktion lrint ()
lroundf - - Der Alias ​​für die Funktion lround ()

Bibliotheksfunktionen

Die folgenden Funktionen sind in der Kopfzeile definiert math.h - -

S.No. Bibliotheksfunktion & Beschreibung
1

double acos (double __x)

Die Funktion acos () berechnet den Hauptwert des Bogenkosinus von __x. Der zurückgegebene Wert liegt im Bereich [0, pi] Bogenmaß. Ein Domänenfehler tritt für Argumente auf, die nicht im Bereich [-1, +1] liegen.

2

double asin (double __x)

Die Funktion asin () berechnet den Hauptwert des Bogensinus von __x. Der zurückgegebene Wert liegt im Bereich [-pi / 2, pi / 2] Bogenmaß. Ein Domänenfehler tritt für Argumente auf, die nicht im Bereich [-1, +1] liegen.

3

double atan (double __x)

Die Funktion atan () berechnet den Hauptwert der Bogen-Tangente von __x. Der zurückgegebene Wert liegt im Bereich [-pi / 2, pi / 2] Bogenmaß.

4

double atan2 (double __y, double __x)

Die Funktion atan2 () berechnet den Hauptwert der Bogen-Tangente von __y / __x unter Verwendung der Vorzeichen beider Argumente, um den Quadranten des Rückgabewerts zu bestimmen. Der zurückgegebene Wert liegt im Bereich [-pi, + pi] Bogenmaß.

5

double cbrt (double __x)

Die Funktion cbrt () gibt die Kubikwurzel von __x zurück.

6

double ceil (double __x)

Die Funktion Ceil () gibt den kleinsten Integralwert größer oder gleich __x zurück, ausgedrückt als Gleitkommazahl.

7

static double copysign (double __x, double __y)

Die Funktion copysign () gibt __x zurück, jedoch mit dem Vorzeichen __y. Sie funktionieren auch dann, wenn __x oder __y NaN oder Null sind.

8

double cos(double __x)

Die Funktion cos () gibt den Cosinus von __x zurück, gemessen im Bogenmaß.

9

double cosh (double __x)

Die Funktion cosh () gibt den hyperbolischen Cosinus von __x zurück.

10

double exp (double __x)

Die Funktion exp () gibt den Exponentialwert von __x zurück.

11

double fabs (double __x)

Die Funktion fabs () berechnet den Absolutwert einer Gleitkommazahl __x.

12

double fdim (double __x, double __y)

Die Funktion fdim () gibt max (__ x - __y, 0) zurück. Wenn __x oder __y oder beide NaN sind, wird NaN zurückgegeben.

13

double floor (double __x)

Die Funktion floor () gibt den größten Integralwert kleiner oder gleich __x zurück, ausgedrückt als Gleitkommazahl.

14

double fma (double __x, double __y, double __z)

Die Funktion fma () führt ein Gleitkomma-Multiplikationsaddieren durch. Dies ist die Operation (__x * __y) + __z, aber das Zwischenergebnis wird nicht auf den Zieltyp gerundet. Dies kann manchmal die Genauigkeit einer Berechnung verbessern.

15

double fmax (double __x, double __y)

Die Funktion fmax () gibt den größeren der beiden Werte __x und __y zurück. Wenn ein Argument NaN ist, wird das andere Argument zurückgegeben. Wenn beide Argumente NaN sind, wird NaN zurückgegeben.

16

double fmin (double __x, double __y)

Die Funktion fmin () gibt den kleineren der beiden Werte __x und __y zurück. Wenn ein Argument NaN ist, wird das andere Argument zurückgegeben. Wenn beide Argumente NaN sind, wird NaN zurückgegeben.

17

double fmod (double __x, double__y)

Die Funktion fmod () gibt den Gleitkomma-Rest von __x / __y zurück.

18

double frexp (double __x, int * __pexp)

Die Funktion frexp () zerlegt eine Gleitkommazahl in einen normalisierten Bruch und eine ganzzahlige Potenz von 2. Sie speichert die Ganzzahl in dem int-Objekt, auf das __pexp zeigt. Wenn __x eine normale Gleitkommazahl ist, gibt die Funktion frexp () den Wert v zurück, so dass v eine Größe im Intervall [1/2, 1) oder Null hat und __x gleich v mal 2 ist, die auf die Potenz __pexp angehoben werden. Wenn __x Null ist, sind beide Teile des Ergebnisses Null. Wenn __x keine endliche Zahl ist, gibt frexp () __x unverändert zurück und speichert 0 durch __pexp.

Note - Diese Implementierung erlaubt einen Nullzeiger als Direktive, um das Speichern des Exponenten zu überspringen.

19

double hypot (double __x, double__y)

Die Funktion hypot () gibt sqrt (__ x * __ x + __y * __ y) zurück. Dies ist die Länge der Hypotenuse eines rechtwinkligen Dreiecks mit Seiten der Länge __x und __y oder der Abstand des Punktes (__x, __y) vom Ursprung. Die Verwendung dieser Funktion anstelle der direkten Formel ist sinnvoll, da der Fehler viel kleiner ist. Kein Unterlauf mit kleinen __x und __y. Kein Überlauf, wenn das Ergebnis im Bereich liegt.

20

static int isfinite (double __x)

Die Funktion isfinite () gibt einen Wert ungleich Null zurück, wenn __x endlich ist: nicht plus oder minus unendlich und nicht NaN.

21

int isinf (double __x)

Die Funktion isinf () gibt 1 zurück, wenn das Argument __x positiv unendlich ist, -1, wenn __x negativ unendlich ist, und andernfalls 0.

Note - Der GCC 4.3 kann diese Funktion durch Inline-Code ersetzen, der den Wert 1 für beide Unendlichkeiten zurückgibt (gcc-Fehler Nr. 35509).

22

int isnan (double __x)

Die Funktion isnan () gibt 1 zurück, wenn das Argument __x eine "Nicht-Zahl" darstellt (NaN) Objekt, sonst 0.

23

double ldexp (double __x, int __exp )

Die Funktion ldexp () multipliziert eine Gleitkommazahl mit einer ganzzahligen Potenz von 2. Sie gibt den Wert von __x mal 2 zurück, der auf die Potenz __exp angehoben wird.

24

double log (double __x)

Die Funktion log () gibt den natürlichen Logarithmus des Arguments __x zurück.

25

double log10(double __x)

Die Funktion log10 () gibt den Logarithmus des Arguments __x an Basis 10 zurück.

26

long lrint (double __x)

Die Funktion lrint () rundet __x auf die nächste Ganzzahl und rundet die halben Fälle auf die gerade Ganzzahlrichtung. (Das heißt, sowohl 1,5 als auch 2,5 Werte werden auf 2 gerundet). Diese Funktion ähnelt der Funktion rint (), unterscheidet sich jedoch in der Art des Rückgabewerts und darin, dass ein Überlauf möglich ist.

Returns

Der gerundete lange Ganzzahlwert. Wenn __x keine endliche Zahl oder kein Überlauf ist, gibt diese Realisierung den LONG_MIN-Wert (0x80000000) zurück.

27

long lround (double __x)

Die Funktion lround () rundet __x auf die nächste Ganzzahl, rundet jedoch die Hälfte der Fälle von Null weg (anstatt auf die nächste gerade Ganzzahl). Diese Funktion ähnelt der Funktion round (), unterscheidet sich jedoch in der Art des Rückgabewerts und darin, dass ein Überlauf möglich ist.

Returns

Der gerundete lange Ganzzahlwert. Wenn __x keine endliche Zahl ist oder ein Überlauf war, gibt diese Realisierung den LONG_MIN-Wert (0x80000000) zurück.

28

double modf (double __x, double * __iptr )

Die Funktion modf () unterteilt das Argument __x in integrale und gebrochene Teile, von denen jeder das gleiche Vorzeichen wie das Argument hat. Es speichert den integralen Teil als Doppel in dem Objekt, auf das __iptr zeigt.

Die Funktion modf () gibt den vorzeichenbehafteten Bruchteil von __x zurück.

Note- Diese Implementierung überspringt das Schreiben mit dem Nullzeiger. Der GCC 4.3 kann diese Funktion jedoch durch Inline-Code ersetzen, der die Verwendung der NULL-Adresse zur Vermeidung des Speicherns nicht zulässt.

29

float modff (float __x, float * __iptr)

Der Alias ​​für modf ().

30

double pow (double __x, double __y)

Die Funktion pow () gibt den Wert von __x an den Exponenten __y zurück.

31

double round (double __x)

Die Funktion round () rundet __x auf die nächste Ganzzahl, rundet jedoch die Hälfte der Fälle von Null weg (anstatt auf die nächste gerade Ganzzahl). Überlauf ist nicht möglich.

Returns

Der gerundete Wert. Wenn __x ein Integral oder eine Unendlichkeit ist, wird __x selbst zurückgegeben. Wenn __x istNaN, dann NaN ist zurück gekommen.

32

int signbit (double __x)

Die Funktion signbit () gibt einen Wert ungleich Null zurück, wenn für den Wert von __x das Vorzeichenbit gesetzt ist. Dies ist nicht dasselbe wie "__x <0,0", da nach IEEE 754-Gleitkomma Null vorzeichenbehaftet werden kann. Der Vergleich "-0.0 <0.0" ist falsch, aber "signbit (-0.0)" gibt einen Wert ungleich Null zurück.

33

double sin (double __x)

Die Funktion sin () gibt den Sinus von __x zurück, gemessen im Bogenmaß.

34

double sinh (double __x)

Die Funktion sinh () gibt den hyperbolischen Sinus von __x zurück.

35

double sqrt (double __x)

Die Funktion sqrt () gibt die nicht negative Quadratwurzel von __x zurück.

36

double square (double __x)

Die Funktion square () gibt __x * __x zurück.

Note - Diese Funktion gehört nicht zur C-Standarddefinition.

37

double tan (double __x)

Die Funktion tan () gibt die Tangente von __x zurück, gemessen im Bogenmaß.

38

double tanh ( double __x)

Die Funktion tanh () gibt den hyperbolischen Tangens von __x zurück.

39

double trunc (double __x)

Die Funktion trunc () rundet __x auf die nächste Ganzzahl, deren absoluter Wert nicht größer ist.

Beispiel

Das folgende Beispiel zeigt, wie die gängigsten Funktionen der math.h-Bibliothek verwendet werden.

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() {

}

Ergebnis

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