Diferencia entre revisiones de «float»
(→Ejemplo) |
(→Ejemplo 2) |
||
(No se muestran 18 ediciones intermedias del mismo usuario) | |||
Línea 1: | Línea 1: | ||
== Descripción == | == Descripción == | ||
− | El formato numérico de 4 bytes (32 bits), son números de '''punto flotante''' osea con decimales. Están comprendidos entre 3. | + | El formato numérico de 4 bytes (32 bits), son números de '''punto flotante''' osea con decimales. Están comprendidos entre -3.4E38 y +3.4E38. |
Este tipo de números se usan a menudo para aproximar los valores analógicos y continuos porque tienen mayor resolución que los números enteros. | Este tipo de números se usan a menudo para aproximar los valores analógicos y continuos porque tienen mayor resolución que los números enteros. | ||
− | {{Nota|Si hacemos operaciones matemáticas con '''float''', es necesario agregar un punto decimal, de lo contrario, será tratado como | + | {{Nota|Si hacemos operaciones matemáticas con '''float''', es necesario agregar un punto decimal, de lo contrario, será tratado como un int.}} |
+ | |||
+ | Los 32 bits esta distribuidos asi: | ||
+ | * EL primer bit es el signo (1 = negativo) | ||
+ | * Los 8 siguientes son la parte entera. | ||
+ | * Los 23 restantes son los decimales. | ||
== Sintaxis == | == Sintaxis == | ||
Línea 13: | Línea 18: | ||
== Parametros == | == Parametros == | ||
− | ;variable: | + | ;variable: Nombre de variable a definir. |
− | ;valor: | + | ;valor: El valor asignado a la variable que debe contener un punto. |
− | ;valorF: | + | ;valorF: Forzar tipo con subfijo '''F'''. Puedes omitir la palabra float antes de nombre de variable. |
+ | |||
+ | {| class="wikitable col2cen" | ||
+ | |+Posibles formateadores | ||
+ | !Base!!Subfijo!!Ejemplo | ||
+ | |- | ||
+ | |[[unsigned int]]||U||n = 123U | ||
+ | |- | ||
+ | |[[long]]||L||n = 123L | ||
+ | |- | ||
+ | |[[unsigned long]]||UL||n = 123UL | ||
+ | |- | ||
+ | |[[float]]||F||n =12.3F | ||
+ | |} | ||
+ | |||
+ | == Comentarios == | ||
+ | Las constantes de punto flotante también se pueden expresar en una variedad de notación científica. 'E' y 'e' son aceptados como indicadores de exponente válidos. | ||
== Advertencias == | == Advertencias == | ||
* Los '''float''' tienen sólo 6-7 dígitos decimales de precisión. Eso significa que el número total de dígitos, no es el número a la derecha del punto decimal. | * Los '''float''' tienen sólo 6-7 dígitos decimales de precisión. Eso significa que el número total de dígitos, no es el número a la derecha del punto decimal. | ||
* Los números de punto flotante '''no son exactos''' y pueden producir resultados extraños si se comparan. Por ejemplo 6.0 / 3.0 puede no ser igual 2.0. En su lugar debe comprobar que el valor absoluto de la diferencia entre el número es menor que un número pequeño. | * Los números de punto flotante '''no son exactos''' y pueden producir resultados extraños si se comparan. Por ejemplo 6.0 / 3.0 puede no ser igual 2.0. En su lugar debe comprobar que el valor absoluto de la diferencia entre el número es menor que un número pequeño. | ||
− | * A diferencia de otras plataformas, donde se puede obtener una mayor precisión mediante el uso de un double (por ejemplo, hasta 15 dígitos), en el Arduino, el double es del '''mismo tamaño que el float'''. | + | * A diferencia de otras plataformas, donde se puede obtener una mayor precisión mediante el uso de un [[double]] (por ejemplo, hasta 15 dígitos), en el Arduino, el [[double]] es del '''mismo tamaño que el float'''. |
− | * Las operaciones matemáticas de punto flotante también son mucho más | + | * Las operaciones matemáticas de punto flotante también son '''mucho más lenta''' que las operaciones matemáticas con enteros en los cálculos que realizan, por lo que deben evitarse si, por ejemplo, un bucle tiene que correr a gran velocidad para una función crítica de sincronización. Los programadores suelen convertir los cálculos de punto flotante a entero para aumentar la velocidad. |
+ | |||
+ | == Ejemplo 1 == | ||
+ | Asignaciones directas. | ||
− | |||
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
x = 1.23F; | x = 1.23F; | ||
float n = 2.32; | float n = 2.32; | ||
− | int x = n/2 | + | float z = 2.34E-5 //0.0000234 |
− | float y = n/2 | + | </syntaxhighlight> |
− | float y = n/2.0 | + | |
+ | == Ejemplo 2 == | ||
+ | Operaciones con numeros. | ||
+ | 8/2 es un [[int]]. para que sea '''float''' debe ser 8.0/2, 8/2.0 o 8.0/2.0 | ||
+ | |||
+ | <syntaxhighlight lang="c++"> | ||
+ | int x = n/2 //1 | ||
+ | float y = n/2 //1 | ||
+ | float y = n/2.0 //1.16 | ||
+ | |||
+ | float n = 8.0/2.0; //Entre 1.99 y 2.01 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Ejemplo 3 == | ||
+ | Dividir 100/1024 y luego multiplicarlo nuevamente por 100 no da lo mismo. | ||
+ | |||
+ | <syntaxhighlight lang="c++"> | ||
+ | float n = 100.0/1024.0; | ||
+ | n = 100.0 * n //No es lo mismo | ||
+ | |||
+ | float n = 100.0 * 1024.0; | ||
+ | n = n / 100.0 //Es lo mismo | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Ejemplo 4 == | ||
+ | Si tienes un '''float''' o un [[double]] puedes especificar el numero de decimales. | ||
+ | |||
+ | <syntaxhighlight lang="c++"> | ||
+ | Serial.print(PI, 2); //3.14 | ||
+ | Serial.println(PI, 6); //3.141593 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Vea también == | == Vea también == | ||
− | + | <categorytree mode=all>Tipo dato</categorytree> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Referencias == | == Referencias == | ||
* [https://www.arduino.cc/reference/es/language/functions/time/float/ Guia de referencia de Arduino] | * [https://www.arduino.cc/reference/es/language/functions/time/float/ Guia de referencia de Arduino] | ||
+ | * [https://playground.arduino.cc/ArduinoNotebookTraduccion/Datatypes Playground] | ||
+ | * [https://manueldelgadocrespo.blogspot.com/p/float.html Arduino en español] - Manuel Delgado | ||
+ | * [https://aprendiendoarduino.wordpress.com/2015/03/26/tipos-de-datos/ Aprendiendo Arduino] - Enrique Crespo | ||
+ | * [http://rufianenlared.com/float/ Float, eres problematico y Arduino lo sabe] - Rufian en la red | ||
− | [[Category: | + | [[Category:Tipo dato]] |
Revisión actual del 18:45 2 feb 2020
Contenido
Descripción
El formato numérico de 4 bytes (32 bits), son números de punto flotante osea con decimales. Están comprendidos entre -3.4E38 y +3.4E38.
Este tipo de números se usan a menudo para aproximar los valores analógicos y continuos porque tienen mayor resolución que los números enteros.
Nota: Si hacemos operaciones matemáticas con float, es necesario agregar un punto decimal, de lo contrario, será tratado como un int.
Los 32 bits esta distribuidos asi:
- EL primer bit es el signo (1 = negativo)
- Los 8 siguientes son la parte entera.
- Los 23 restantes son los decimales.
Sintaxis
float variable [= valor]; variable = valorF;
Parametros
- variable
- Nombre de variable a definir.
- valor
- El valor asignado a la variable que debe contener un punto.
- valorF
- Forzar tipo con subfijo F. Puedes omitir la palabra float antes de nombre de variable.
Base | Subfijo | Ejemplo |
---|---|---|
unsigned int | U | n = 123U |
long | L | n = 123L |
unsigned long | UL | n = 123UL |
float | F | n =12.3F |
Comentarios
Las constantes de punto flotante también se pueden expresar en una variedad de notación científica. 'E' y 'e' son aceptados como indicadores de exponente válidos.
Advertencias
- Los float tienen sólo 6-7 dígitos decimales de precisión. Eso significa que el número total de dígitos, no es el número a la derecha del punto decimal.
- Los números de punto flotante no son exactos y pueden producir resultados extraños si se comparan. Por ejemplo 6.0 / 3.0 puede no ser igual 2.0. En su lugar debe comprobar que el valor absoluto de la diferencia entre el número es menor que un número pequeño.
- A diferencia de otras plataformas, donde se puede obtener una mayor precisión mediante el uso de un double (por ejemplo, hasta 15 dígitos), en el Arduino, el double es del mismo tamaño que el float.
- Las operaciones matemáticas de punto flotante también son mucho más lenta que las operaciones matemáticas con enteros en los cálculos que realizan, por lo que deben evitarse si, por ejemplo, un bucle tiene que correr a gran velocidad para una función crítica de sincronización. Los programadores suelen convertir los cálculos de punto flotante a entero para aumentar la velocidad.
Ejemplo 1
Asignaciones directas.
x = 1.23F;
float n = 2.32;
float z = 2.34E-5 //0.0000234
Ejemplo 2
Operaciones con numeros. 8/2 es un int. para que sea float debe ser 8.0/2, 8/2.0 o 8.0/2.0
int x = n/2 //1
float y = n/2 //1
float y = n/2.0 //1.16
float n = 8.0/2.0; //Entre 1.99 y 2.01
Ejemplo 3
Dividir 100/1024 y luego multiplicarlo nuevamente por 100 no da lo mismo.
float n = 100.0/1024.0;
n = 100.0 * n //No es lo mismo
float n = 100.0 * 1024.0;
n = n / 100.0 //Es lo mismo
Ejemplo 4
Si tienes un float o un double puedes especificar el numero de decimales.
Serial.print(PI, 2); //3.14
Serial.println(PI, 6); //3.141593
Vea también
Referencias
- Guia de referencia de Arduino
- Playground
- Arduino en español - Manuel Delgado
- Aprendiendo Arduino - Enrique Crespo
- Float, eres problematico y Arduino lo sabe - Rufian en la red