Arduino - Biblioteca Matemática

A biblioteca Arduino Math (math.h) inclui uma série de funções matemáticas úteis para manipular números de ponto flutuante.

Macros de biblioteca

A seguir estão as macros definidas no cabeçalho math.h -

Macros Valor Descrição
MIM 2.7182818284590452354 A constante e.
M_LOG2E

1.4426950408889634074

/ * log_2 e * /

O logaritmo do e para a base 2
M_1_PI

0,31830988618379067154

/ * 1 / pi * /

A constante 1 / pi
M_2_PI

0,63661977236758134308

/ * 2 / pi * /

A constante 2 / pi
M_2_SQRTPI

1.12837916709551257390

/ * 2 / sqrt (pi) * /

A constante 2 / sqrt (pi)
M_LN10

2,30258509299404568402

/ * log_e 10 * /

O logaritmo natural do 10
M_LN2

0,69314718055994530942

/ * log_e 2 * /

O logaritmo natural do 2
M_LOG10E

0,43429448190325182765

/ * log_10 e * /

O logaritmo do e para a base 10
M_PI

3,14159265358979323846

/ * pi * /

O pi constante
M_PI_2

3.3V1.57079632679489661923

/ * pi / 2 * /

A constante pi / 2
M_PI_4

0,78539816339744830962

/ * pi / 4 * /

A constante pi / 4
M_SQRT1_2

0,70710678118654752440

/ * 1 / sqrt (2) * /

A constante 1 / sqrt (2)
M_SQRT2

1.41421356237309504880

/ * sqrt (2) * /

A raiz quadrada de 2
acosf - O alias da função acos ()
asinf - O alias para a função asin ()
atan2f - O alias da função atan2 ()
cbrtf - O alias da função cbrt ()
Ceilf - O alias para a função ceil ()
copysignf - O alias da função copysign ()
Coshf - O alias da função cosh ()
expf - O alias da função exp ()
fabsf - O alias da função fabs ()
fdimf - O alias da função fdim ()
floorf - O alias da função floor ()
fmaxf - O alias da função fmax ()
fminf - O alias da função fmin ()
fmodf - O alias da função fmod ()
frexpf - O alias da função frexp ()
hipotf - O alias para a função hypot ()
INFINIDADE - INFINITY constante
isfinitef - O alias da função isfinite ()
isinff - O alias da função isinf ()
isnanf - O alias da função isnan ()
ldexpf - O alias da função ldexp ()
log10f - O alias para a função log10 ()
logf - O alias da função log ()
lrintf - O alias da função lrint ()
lroundf - O alias da função lround ()

Funções de biblioteca

As seguintes funções são definidas no cabeçalho math.h -

S.No. Função e descrição da biblioteca
1

double acos (double __x)

A função acos () calcula o valor principal do arco cosseno de __x. O valor retornado está na faixa [0, pi] radianos. Um erro de domínio ocorre para argumentos fora do intervalo [-1, +1].

2

double asin (double __x)

A função asin () calcula o valor principal do arco seno de __x. O valor retornado está no intervalo [-pi / 2, pi / 2] radianos. Um erro de domínio ocorre para argumentos fora do intervalo [-1, +1].

3

double atan (double __x)

A função atan () calcula o valor principal do arco tangente de __x. O valor retornado está no intervalo [-pi / 2, pi / 2] radianos.

4

double atan2 (double __y, double __x)

A função atan2 () calcula o valor principal do arco tangente de __y / __x, usando os sinais de ambos os argumentos para determinar o quadrante do valor de retorno. O valor retornado está no intervalo [-pi, + pi] radianos.

5

double cbrt (double __x)

A função cbrt () retorna a raiz cúbica de __x.

6

double ceil (double __x)

A função ceil () retorna o menor valor integral maior ou igual a __x, expresso como um número de ponto flutuante.

7

static double copysign (double __x, double __y)

A função copysign () retorna __x, mas com o sinal de __y. Eles funcionam mesmo se __x ou __y forem NaN ou zero.

8

double cos(double __x)

A função cos () retorna o cosseno de __x, medido em radianos.

9

double cosh (double __x)

A função cosh () retorna o cosseno hiperbólico de __x.

10

double exp (double __x)

A função exp () retorna o valor exponencial de __x.

11

double fabs (double __x)

A função fabs () calcula o valor absoluto de um número de ponto flutuante __x.

12

double fdim (double __x, double __y)

A função fdim () retorna max (__ x - __y, 0). Se __x ou __y ou ambos forem NaN, NaN será retornado.

13

double floor (double __x)

A função floor () retorna o maior valor integral menor ou igual a __x, expresso como um número de ponto flutuante.

14

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

A função fma () executa multiplicação-adição de ponto flutuante. Esta é a operação (__x * __y) + __z, mas o resultado intermediário não é arredondado para o tipo de destino. Às vezes, isso pode melhorar a precisão de um cálculo.

15

double fmax (double __x, double __y)

A função fmax () retorna o maior dos dois valores __x e __y. Se um argumento for NaN, o outro argumento será retornado. Se ambos os argumentos forem NaN, NaN será retornado.

16

double fmin (double __x, double __y)

A função fmin () retorna o menor dos dois valores __x e __y. Se um argumento for NaN, o outro argumento será retornado. Se ambos os argumentos forem NaN, NaN será retornado.

17

double fmod (double __x, double__y)

A função fmod () retorna o resto de ponto flutuante de __x / __y.

18

double frexp (double __x, int * __pexp)

A função frexp () divide um número de ponto flutuante em uma fração normalizada e uma potência integral de 2. Ela armazena o inteiro no objeto int apontado por __pexp. Se __x é um número de ponto flutuante normal, a função frexp () retorna o valor v, de modo que v tenha uma magnitude no intervalo [1/2, 1) ou zero, e __x é igual a v vezes 2 elevado à potência __pexp. Se __x for zero, ambas as partes do resultado serão zero. Se __x não for um número finito, o frexp () retorna __x como está e armazena 0 por __pexp.

Note - Esta implementação permite um ponteiro zero como uma diretiva para ignorar o armazenamento do expoente.

19

double hypot (double __x, double__y)

A função hypot () retorna sqrt (__ x * __ x + __y * __ y). Este é o comprimento da hipotenusa de um triângulo retângulo com lados de comprimento __x e __y, ou a distância do ponto (__x, __y) da origem. Usar esta função em vez da fórmula direta é sábio, pois o erro é muito menor. Sem estouro negativo com __x e __y pequenos. Sem estouro se o resultado estiver dentro do intervalo.

20

static int isfinite (double __x)

A função isfinite () retorna um valor diferente de zero se __x for finito: não mais ou menos infinito, e não NaN.

21

int isinf (double __x)

A função isinf () retorna 1 se o argumento __x for infinito positivo, -1 se __x for infinito negativo e 0 caso contrário.

Note - O GCC 4.3 pode substituir esta função por código embutido que retorna o valor 1 para ambos os infinitos (bug do gcc # 35509).

22

int isnan (double __x)

A função isnan () retorna 1 se o argumento __x representa um "não-um-número" (NaN) objeto, caso contrário, 0.

23

double ldexp (double __x, int __exp )

A função ldexp () multiplica um número de ponto flutuante por uma potência integral de 2. Ela retorna o valor de __x vezes 2 elevado à potência __exp.

24

double log (double __x)

A função log () retorna o logaritmo natural do argumento __x.

25

double log10(double __x)

A função log10 () retorna o logaritmo do argumento __x para a base 10.

26

long lrint (double __x)

A função lrint () arredonda __x para o inteiro mais próximo, arredondando os casos intermediários para a direção do inteiro par. (Isso é 1,5 e 2,5 valores são arredondados para 2). Esta função é semelhante à função rint (), mas difere no tipo de valor de retorno e em que um estouro é possível.

Returns

O valor inteiro longo arredondado. Se __x não for um número finito ou um estouro, essa realização retornará o valor LONG_MIN (0x80000000).

27

long lround (double __x)

A função lround () arredonda __x para o inteiro mais próximo, mas arredonda os casos intermediários para longe de zero (em vez de para o inteiro par mais próximo). Esta função é semelhante à função round (), mas difere no tipo de valor de retorno e em que um estouro é possível.

Returns

O valor inteiro longo arredondado. Se __x não for um número finito ou um estouro for, essa realização retornará o valor LONG_MIN (0x80000000).

28

double modf (double __x, double * __iptr )

A função modf () divide o argumento __x em partes inteiras e fracionárias, cada uma com o mesmo sinal do argumento. Ele armazena a parte integral como um duplo no objeto apontado por __iptr.

A função modf () retorna a parte fracionária com sinal de __x.

Note- Esta implementação pula a escrita pelo ponteiro zero. No entanto, o GCC 4.3 pode substituir esta função por código embutido que não permite o uso de endereço NULL para evitar o armazenamento.

29

float modff (float __x, float * __iptr)

O alias para modf ().

30

double pow (double __x, double __y)

A função pow () retorna o valor de __x para o expoente __y.

31

double round (double __x)

A função round () arredonda __x para o inteiro mais próximo, mas arredonda os casos intermediários para longe de zero (em vez de para o inteiro par mais próximo). O estouro é impossível.

Returns

O valor arredondado. Se __x for integral ou infinito, o próprio __x será retornado. Se __x forNaN, então NaN é devolvido.

32

int signbit (double __x)

A função signbit () retorna um valor diferente de zero se o valor de __x tiver seu bit de sinal definido. Isso não é o mesmo que `__x <0,0 ', porque o ponto flutuante IEEE 754 permite que zero seja assinado. A comparação `-0,0 <0,0 'é falsa, mas` signbit (-0,0)' retornará um valor diferente de zero.

33

double sin (double __x)

A função sin () retorna o seno de __x, medido em radianos.

34

double sinh (double __x)

A função sinh () retorna o seno hiperbólico de __x.

35

double sqrt (double __x)

A função sqrt () retorna a raiz quadrada não negativa de __x.

36

double square (double __x)

A função square () retorna __x * __x.

Note - Esta função não pertence à definição padrão C.

37

double tan (double __x)

A função tan () retorna a tangente de __x, medida em radianos.

38

double tanh ( double __x)

A função tanh () retorna a tangente hiperbólica de __x.

39

double trunc (double __x)

A função trunc () arredonda __x para o inteiro mais próximo não maior em valor absoluto.

Exemplo

O exemplo a seguir mostra como usar as funções mais comuns da biblioteca 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() {

}

Resultado

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