Tipos que contienen números con decimales: flotante, doble
Estos tipos de datos suelen denominarse tipos de datos de punto flotante. Los números se denominan números de punto flotante.
varf flotante = 50,15; doble dvar = 50,0;
Compare el tipo de datos de punto flotante: flotante y doble
La diferencia entre un tipo de datos flotante y doble tiene que ver con la precisión en el número de decimales.
Basado en la especificación VexOS – ARM 7, el flotador puede manejar 6 o 7 lugares, y el doble puede manejar 15 o 16.
float: en el V5os actual, el controlador parece permitir hasta 8 decimales de precisión.
p.ej
flotador fvar1 = 1,12345670; flotante fvar2 = 1,12345678;
fval1 es diferente de fvar2,
vs
flotador fvar1 = 1,123456780; flotante fvar2 = 1,123456781;
fval1 se evaluará igual que fvar2.
doble: permite hasta 17 decimales de precisión.
p.ej
doble dvar1 = 1,12345678912345678; doble dvar2 = 1,12345678912345670;
dval1 es diferente de dvar2,
vs
doble dvar1 = 1,123456789123456789; doble dvar2 = 1,123456789123456780;
dval1 se evaluará igual que dvar2.
No utilice "doble" a menos que necesite alta precisión
Hay dos razones por las que no debería utilizar "doble" a menos que necesite alta precisión:
- Ocupa el tipo flotante 2X.
- Requiere una potencia de procesamiento mucho mayor.
Según la especificación VexOS – ARM 7, un flotador puede ocupar 6 o 7 lugares, y un doble puede ocupar 15 o 16. En cualquier caso, no debe confiar en la precisión de los últimos dígitos en doble o flotante. Se almacena de manera muy diferente a almacenar un "int" debido a algo llamado "cálculo de punto flotante" (que está fuera del alcance de este artículo).
Por lo tanto, es posible que pierda precisión en los últimos decimales.
La operación en doble es bastante costosa en comparación con la operación flotante y mucho más alta que la operación "entero" debido a algo llamado cálculos de punto flotante.
Según el estándar IEEE, lo siguiente se encuentra dentro de un rango más confiable.
Tipo | Valor positivo más pequeño | Valor positivo más grande | # de precisión |
flotar | 10 x 1,17549 | 10 38 x 3,40282 | 6 dígitos |
doble | 10 -308 o 2,22507 | 10 308 x 1,79769 | 15 dígitos |
¿Puedes intercambiar tipos de datos primitivos? - Fundición
Es posible intercambiar tipos de datos. Esta técnica se llama "Casting". Si bien el casting es una práctica bastante común, hazlo sólo si es necesario.
Una de las prácticas más comunes es intercambiar char e int.
Esto se debe a que ambos representan valores enteros con una excepción:
- "int" contiene 4 bytes (u 8 bytes en algunos compiladores)
- "char" contiene sólo 1 byte.
Entonces, por ejemplo
char aVal = 100; int iVal = aVal; // conversión implícita
o
int iVal = (char) aVal; // casting explícito.
Precaución por truncamiento implícito:
p.ej
Otra práctica común es intercambiar int y float.
valorf flotante = 5,486; fracción flotante = fVal - (int)fVal; //lo hace: 5.486 - 5
Precaución por truncamiento implícito:
p.ej
int iVal = 50; flotante fVal = iVal / 100;
ahora fVal = 0,0, NO 0,5.
Está absolutamente bien aprovechar el truncamiento implícito, que suele ser una parte importante de las operaciones en algunos escenarios. Sin embargo, debe asegurarse de utilizar esta técnica por diseño.
Si no desea que se produzca un truncamiento implícito, debe realizar una conversión explícita:
- conversión implícita:
float fVal = iVal / 100.0;
- conversión explícita:
float fVal = (flotante) iVal / 100