Diferencia entre revisiones de «división»
De ArduWiki
(→Advertencias) |
(→Vea también) |
||
(No se muestran 9 ediciones intermedias de 2 usuarios) | |||
Línea 1: | Línea 1: | ||
== Descripción == | == 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 == | == Sintaxis == | ||
Línea 7: | Línea 8: | ||
== Advertencias == | == 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 [[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 == | ||
<pre> | <pre> | ||
+ | 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 | ||
</pre> | </pre> | ||
== Vea también == | == Vea también == | ||
− | + | <categorytree mode=all>Operador aritmetico</categorytree> | |
− | + | <categorytree mode=all>Operador aritmetico compuesto</categorytree> | |
− | |||
− | |||
− | |||
== Referencias == | == Referencias == | ||
− | * [https://www.arduino.cc/reference/ | + | * [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: | + | [[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