Está en la página 1de 12

Leccin 14: Operaciones matemticas

Hasta ahora el curso se ha centrado ms en la utilizacin de nuestro Arduino y


la serie de componentes que giran a su alrededor. Pero en esta ocasin hemos
querido dedicar esta leccin a un concepto puramente de sotware: las
operaciones matemticas. El uso de operadores matemticos y de funciones
matemticas es una tema fundamental en la mayora de los proyectos
desarrollados con Arduino porque son los que nos posibilitan la realizacin de
los diferentes clculos necesarios para llevar a buen fin nuestro proyecto.
Los lectores que estn familiaraizados con la programacin en C o C++ podrn
comprobar que los operadores y las funciones matemticas son iguales que los
que se utilizan en estos lenguajes de programacin. Como suele ser habitual en
el tratamiento de este tema en todos los libros de texto, vamos a estudiar los
operadores matemticos agrupados por familias bsicas. Para poder practicar
con su uso vamos a realizar el siguiente montaje, dnde simplemente se utiliza
un terminal para poder presentar por pantalla los valores resultantes de
nuestras operaciones.

Operadores suma, resta, multiplicacin y divisin.


Sirven para realizar las cuatro operaciones fundamentales y se utilizan los
operadores universales para estas operaciones +, -,* y /. Para comprobar su
funcionamiento vamos a utilizar el siguiente programa muy sencillo que nos
muestra su uso.

Hemos utilizado la funcin setup() en lugar de la habitual loop() para que las
operaciones no se estn realizando de forma continua. El resultado de compilar
y ejecutar nuestro programa es el mostrado en la imagen siguiente, donde se
pueden ver el resultado de las cuatro operaciones matemticas bsicas.

Podemos utilizar parntesis para indicar qu operaciones se deben llevar a


cabo con anterioridad a otras.

Operadores Incrementadores y Decrementadores.


Los operadores para incrementar o decrementar el valor de una variables son
+= y -=. Su uso equivale a las siguientes sumas y restas:
resultado += 5 --> resultado = resultado + 5
resultado -=3 --> resultado = resultado - 3.
Su utilizacin se muestra en el siguiente ejemplo.

Tambin se pueden utilizar los operadores para incrementar y decrementar una


variable un nmero 'n' de veces. Es decir usar los operadores *= y /= para
multiplicar o dividir una variable por un nmero. El equivalente con los
productos y divisiones sera:
resultado *=5 --> resultado = resultado * 5
resultado /= 3 --> resultado = resultado / 3
Un cdigo que utiliza estos operadores sera:

Para terminar esta seccin, veremos los operadores ++ y --. Sirven para
incremetar o decrementar una unidad el valor de la variable. El equivalente con
las sumas y restas seran:
resultado++ ---> resultado = resultado + 1
resultado-- ---> resultado = resultado - 1
Un programa de ejemplo sera:

Operador Resto de una divisin.

El operador resto (%) nos proporciona el resto resultante de dividir dos


nmeros. El ejemplo de utilizacin se muestra en la siguiente imagen.

En este caso el resto es 0.

Y en este caso el resto es 1.


Un sencillo ejemplo de utilizacin sera el siguiente cdigo que comprueba si un
nmero es par o impar.

Funcin valor absoluto.


Para calcular el valor absoluto de una variable podemos utilizar la funcin
abs( <operando> ) que nos devulve una variable de tipo entero que se
corresponde con el valor absoluto del operando. El ejemplo de uso se muestra
a continuacin.

El resultado devuelto ser 15. Es importante caer en la cuenta que en la


programacin de Arduino se utiliza el punto '.' como separador decimal y no la
coma ','.
Funcin potencia.

Para calcular el resultado de elevar un determinado nmero x a una potencia y,


la funcin que tenemos que utlizar es pow( <base> , <exponente>). Su uso se
muestra en el siguiente cdigo.

Para calcular la raiz cuadrada de un nmero utilizaremos la funcin


sqrt( <operando>).

Nmeros decimales y varibles tipo float.


Hasta ahora hemos utilizado nmeros enteros en todos nuestros ejemplos. Sin
embargo, es muy habitual que los clculos matemticos den como resultados
nmeros decimales y no enteros. Para manejarlos, Arduino nos permite utilizar
dos tipos de variables: float y double. En Arduino se mantienen los dos tipos
por compatibilidad con C y C++, pero es importante tener en cuenta que no
hay diferencia entre ambos. Los dos permiten utilizar nmeros decimales entre
el intervalo 3.4028235e+38 y -3.4028235e+38.
En informtica, para gestionar nmeros decimales utilizamos la tcnica
denominada de punto flotante. La razn de ello es que la memoria limitada de
nuestros equipos no nos permiten guardar una gran cantidad de nmeros con
la precisin necesaria para almacenarlos con todas sus cifras decimales. Por
ello, se recurre a la mencionada tcnica que consiste en descomponer el
nmero en dos partes y almacenarlas juntas. Por un lado se almacena
la mantisa (tambin llamada coeficiente o significando) que contiene los dgitos
del nmero. Mantisas negativas representan nmeros negativos. Por otro lado
se almacena el exponente que indica dnde se coloca el punto decimal (o
binario) en relacin al inicio de la mantisa. Exponentes negativos representan
nmeros menores que uno. Este formato cumple las siguientes exigencias:

Puede representar nmeros de rdenes de magnitud enormemente


dispares (limitados a la longitud del exponente).

Proporciona la misma precisin relativa para todos los rdenes (limitadoa


a la longitud de la mantisa).

Permite clculos entre magnitudes: multiplicar un nmero muy grande y


uno muy pequeo conserva la precisin de ambos en el resultado.

Los nmeros de coma flotante normalmente se expresan en notacin cientfica


con un punto explcito siempre entre el primer y el segundo dgitos. El
exponente o bien se escribe explcitamente incluyendo la base, o se usa una e
(indiferentemente en maysculas o minsculas) para separarlo de la
mantisa. Ejemplos de uso son:
El nmero float escrito 10.0 equivale a 10
El nmero float escrito 10.324 equivale a 10,324
El nmero float escrito 2.34E5 equivale a 2.34 * 10^5 y su valor es 234000
El nmero float escrito 67e-12 equivale a 67.0 * 10^-12 y su valor es
0.000000000067
El nmero float escrito 3.45e-5 equivale a 3.45 * 10^-5 y su valor es
0.0000345
Es importante tener en cuenta las siguientes limitaciones en el uso de nmeros
de coma flotante:

Los float tienen una precisin de 6 o 7 dgitos decimales. Esto significa el


nmero total de dgitos, no el nmero a la derecha de la coma decimal.
Al contrario que en otras plataformas, donde tu podras obtener mayor
precisin usando una variable tipo double (por ejemplo, por encima de
15 dgitos), en Arduino los double tienen el mismo tamao que los float.

Los nmeros en coma flotante no son exactos, y muchos proporcionan


falsos resultados cuando son comparados. Por ejemplo, 6.0 / 3.0 puede
no ser igual a 2.0. Debes comprobar que el valor absoluto de la
diferencia entre los nmeros pertenezca a un rango pequeo.

La matemtica en coma flotante es mucho ms lenta que la matemtica


de enteros para realizar operaciones, por lo que deberas evitarla si, por
ejemplo, un bucle tiene que ejecutarse a la mxima velocidad para
funciones con temporizaciones precisas. Los programadores
normalmente suelen asignar unas longitudes para convertir las
operaciones de coma flotante en clculos con enteros, para aumentar la
velocidad.

Es importante dedicar un tiempo a estudiar y practicar el uso correcto de los


nmeros en coma flotante (float) porque tiene singularidades, como acabamos
de ver, que conviene tener en cuenta.
Adems, es importante tener en cuenta que cuando utilizamos las funciones
print o println para mostrar una variable de tipo float, hay que utilizar la
siguiente sintaxis para no ver truncados los valores decimales, porque por

defecto print y println slo muestran dos posiciones decimales. Un ejemplo nos
ayudar a entender la diferencia.

funciones trigonomtricas.
Las funciones trigonomtricas bsicas se pueden calcular utilizando las
funciones sin( <angulo> ), cos(<angulo> ) y tan( <angulo> ). Con ellas
podemos calcular el seno, el coseno y la tangente de un ngulo dado. Es
importante tener en cuenta que las tres funciones esperan que el ngulo se
exprese en radianes. El radin es la unidad de ngulo plano en el Sistema
Internacional de Unidades. Representa el ngulo central en una circunferencia
y abarca un arco cuya longitud es igual a la del radio. Por tanto, el ngulo
completo de una circunferencia de radio r, medido en radianes es 2 radianes.

Si preferimos pasar el ngulo expresado en grados sexagesimales, podemos


convertirlos facilmente utilizando la constante DEG_TO_RAD definida por
defecto cuando utilizamos el sistema de desarrollo de ARDUINO. El siguiente
programa nos facilita la conversin de grados sexagesimales a radianes de
todos los valores comprendidos entre 0 y 360 en saltos de 5 en 5.

El resultado en el terminal ser:

Veamos ahora un ejemplo de utilizacin de las funciones vistas para calcular el


seno, el coseno y la tangente de 45. Observe que utilizamos la funcin println
con la clusula DEC para no truncar los nmeros decimales.

El resultado obtenido en el terminal virtual debe ser:

Con lo visto en esta leccin, el lector ya est en disposicin de enfrentarse con


aquellos proyectos que necesitan realizar clculos matemticos.

También podría gustarte