Diferencia entre revisiones de «división»

De ArduWiki
Saltar a: navegación, buscar
(Ejemplo)
(Vea también)
 
(No se muestran 7 ediciones intermedias de 2 usuarios)
Línea 8: Línea 8:
  
 
== Advertencias ==
 
== Advertencias ==
Nada.
+
* Al hacer operaciones aritméticas preste atención a los tipo de dato involucrados.
 +
* Por lógica, si la variable donde se almacenará el resultado no tiene signo, este jamás será negativo aunque uno de los operandos sea negativo.
 +
* La división entre enteros nunca produce fracciones, ni siquiera almacenando su resultado en un [[float]] o [[double]]. Para forzar la preservación de las cifras decimales, uno de los operandos debe ser (o convertirse a) un punto flotante.
 +
* La división por cero no es motivo para "colgar" la ejecución de un programa; sin embargo el resultado es indeterminado. Experimentando con la arquitectura AVR, se descubrió que la división por cero de enteros tiene como resultado todos los bits de la variable en 1; pero por alguna razón las funciones [[Serial|print()]] imprimen dicho resultado como el valor máximo de [[unsigned long]] ("4294967295"); a pesar de que la variable sea de tipo [[byte]], con signo (en este caso debería ser siempre -1), y se haya comprobado que si es un tipo menor a [[unsigned long]], nunca se sobrescriben 4 bytes en memoria.
 +
* La división por cero entre puntos flotantes ([[float]] o [[double]]) resulta en un valor llamado "infinito" (inf); se presume que se debe a la misma forma que se manejaría entre enteros.
  
 
== Ejemplo ==
 
== Ejemplo ==
Línea 16: Línea 20:
 
x = x/2;  //10
 
x = x/2;  //10
 
x /= y;  //2 (Divide x entre y)
 
x /= y;  //2 (Divide x entre y)
 +
 +
float f = 5 / 2; // Según una de las advertencias, el resultado sería 2.0 (no se preservaron las cifras decimales)
 +
f = 5.0 / 2; // Ya que uno de los operandos es un punto flotante, el resultado ahora sí sería 2.5
 +
f = float(x) / 3; // Al convertir una variable entera a un punto flotante, los decimales también se preservan
 +
// En este punto de la ejecución, f valdría 0.6666667
 
</pre>
 
</pre>
  
 
== Vea también ==
 
== Vea también ==
* [[asignacion]]
+
<categorytree mode=all>Operador aritmetico</categorytree>
* [[suma]]
+
<categorytree mode=all>Operador aritmetico compuesto</categorytree>
* [[resta]]
 
* [[multiplicación]]
 
* [[modulo]]
 
  
 
== Referencias ==
 
== Referencias ==
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
+
* [https://www.arduino.cc/reference/en/language/structure/arithmetic-operators/division/ Guia de referencia de Arduino]
 +
* [https://aprendiendoarduino.wordpress.com/2018/04/08/operadores-5/ Aprendiendo Arduino]
  
[[Category:Estructura]]
+
[[Category:Operador aritmetico]]

Revisión actual del 00:20 27 sep 2019

Descripción

La división es una de las cuatro operaciones aritméticas primarias. El operador /(barra inclinada) opera en dos operandos para producir el resultado.

Sintaxis

variable = valor / expresion;

Advertencias

  • Al hacer operaciones aritméticas preste atención a los tipo de dato involucrados.
  • Por lógica, si la variable donde se almacenará el resultado no tiene signo, este jamás será negativo aunque uno de los operandos sea negativo.
  • La división entre enteros nunca produce fracciones, ni siquiera almacenando su resultado en un float o double. Para forzar la preservación de las cifras decimales, uno de los operandos debe ser (o convertirse a) un punto flotante.
  • La división por cero no es motivo para "colgar" la ejecución de un programa; sin embargo el resultado es indeterminado. Experimentando con la arquitectura AVR, se descubrió que la división por cero de enteros tiene como resultado todos los bits de la variable en 1; pero por alguna razón las funciones print() imprimen dicho resultado como el valor máximo de unsigned long ("4294967295"); a pesar de que la variable sea de tipo byte, con signo (en este caso debería ser siempre -1), y se haya comprobado que si es un tipo menor a unsigned long, nunca se sobrescriben 4 bytes en memoria.
  • La división por cero entre puntos flotantes (float o double) resulta en un valor llamado "infinito" (inf); se presume que se debe a la misma forma que se manejaría entre enteros.

Ejemplo

int x = 20;
int y = 5;
x = x/2;  //10
x /= y;   //2 (Divide x entre y)

float f = 5 / 2; // Según una de las advertencias, el resultado sería 2.0 (no se preservaron las cifras decimales)
f = 5.0 / 2; // Ya que uno de los operandos es un punto flotante, el resultado ahora sí sería 2.5
f = float(x) / 3; // Al convertir una variable entera a un punto flotante, los decimales también se preservan
// En este punto de la ejecución, f valdría 0.6666667

Vea también


Referencias