El tipo de datos flotantes es un punto flotante IEEE 754 de 32 bits de precisión simple y el tipo de datos doble es un punto flotante IEEE 754 de 64 bits de precisión doble.
Qué significa eso? ¿Y cuándo debo usar float en lugar de double o viceversa?
double
lugar defloat
salvarlo de un error relacionado con la precisión, vale la pena .Respuestas:
La página de Wikipedia es un buen lugar para comenzar.
Para resumir:
float
se representa en 32 bits, con 1 bit de signo, 8 bits de exponente y 23 bits del significado (o lo que sigue de un número de notación científica: 2.33728 * 10 12 ; 33728 es el significado).double
se representa en 64 bits, con 1 bit de signo, 11 bits de exponente y 52 bits de significado.Por defecto, Java utiliza
double
para representar sus números de punto flotante (por lo que3.14
se escribe un literaldouble
). También es el tipo de datos que le dará un rango de números mucho mayor, por lo que recomendaría encarecidamente su usofloat
.Puede haber ciertas bibliotecas que realmente fuerzan su uso
float
, pero en general, a menos que pueda garantizar que su resultado sea lo suficientemente pequeño como para caber enfloat
el rango prescrito , entonces es mejor optar pordouble
.Si necesita precisión, por ejemplo, no puede tener un valor decimal que sea inexacto (como
1/10 + 2/10
), o está haciendo algo con moneda (por ejemplo, que representa $ 10.33 en el sistema), entonces use unBigDecimal
, que puede admitir un cantidad arbitraria de precisión y maneja situaciones como esa con elegancia.fuente
*100
. Por favor, tiene un punto aquí, pero ¿podría ser más preciso? :)Un flotador te da aprox. Precisión de 6-7 dígitos decimales, mientras que un doble le da aprox. 15-16. Además, el rango de números es mayor para el doble.
Un doble necesita 8 bytes de espacio de almacenamiento, mientras que un flotante necesita solo 4 bytes.
fuente
Los números de punto flotante, también conocidos como números reales, se usan al evaluar expresiones que requieren precisión fraccional. Por ejemplo, los cálculos como la raíz cuadrada o los trascendentales como el seno y el coseno, dan como resultado un valor cuya precisión requiere un tipo de punto flotante. Java implementa el conjunto estándar (IEEE – 754) de tipos y operadores de punto flotante. Hay dos tipos de tipos de coma flotante, flotante y doble, que representan números de precisión simple y doble, respectivamente. Su ancho y rangos se muestran aquí:
flotador
El tipo flotante especifica un valor de precisión simple que utiliza 32 bits de almacenamiento. La precisión simple es más rápida en algunos procesadores y ocupa la mitad de espacio que la precisión doble, pero se volverá imprecisa cuando los valores sean muy grandes o muy pequeños. Las variables de tipo flotante son útiles cuando necesita un componente fraccional, pero no requieren un alto grado de precisión.
Aquí hay algunos ejemplos de declaraciones de variables flotantes:
flotador hightemp, lowtemp;
doble
La precisión doble, como se indica con la palabra clave doble, utiliza 64 bits para almacenar un valor. La precisión doble es en realidad más rápida que la precisión simple en algunos procesadores modernos que han sido optimizados para cálculos matemáticos de alta velocidad. Todas las funciones matemáticas trascendentales, como sin (), cos () y sqrt (), devuelven valores dobles. Cuando necesita mantener la precisión en muchos cálculos iterativos, o está manipulando números de gran valor, el doble es la mejor opción.
fuente
float
tampocodouble
tipos son los más utilizados para la moneda en Java, porque abren la posibilidad de errores de redondeo. Este artículo entra en más detalles: javapractices.com/topic/TopicAction.do?Id=13Java parece tener un sesgo hacia el uso de doble para los cálculos, no obstante:
Por ejemplo, el programa que escribí hoy, los métodos no funcionaron cuando usé float, pero ahora funcionan muy bien cuando sustituí float con double (en el IDE de NetBeans):
fuente
Esto dará error:
/MyClass.java:3: error: tipos incompatibles: posible conversión con pérdida de doble a flotante flotante a = 0.5;
Esto funcionará perfectamente bien
Esto también funcionará perfectamente bien
Motivo : Java por defecto almacena números reales como el doble para garantizar una mayor precisión.
El doble ocupa más espacio pero es más preciso durante el cálculo y el flotante ocupa menos espacio pero es menos preciso.
fuente
De acuerdo con los estándares IEEE, flotante es una representación de 32 bits de un número real, mientras que el doble es una representación de 64 bits.
En los programas de Java, normalmente vemos el uso del tipo de datos doble. Es solo para evitar desbordamientos, ya que el rango de números que pueden acomodarse usando el tipo de datos doble es mayor que el rango cuando se usa flotación.
Además, cuando se requiere alta precisión, se recomienda el uso de doble. Pocos métodos de biblioteca que se implementaron hace mucho tiempo aún requieren el uso del tipo de datos flotante como un deber (eso es solo porque se implementó usando flotante, ¡nada más!).
Pero si está seguro de que su programa requiere números pequeños y no se producirá un desbordamiento con el uso de float, entonces el uso de float mejorará en gran medida la complejidad de su espacio ya que los flotantes requieren la mitad de la memoria requerida por el doble.
fuente
Este ejemplo ilustra cómo extraer el signo (el bit más a la izquierda), el exponente (los 8 bits siguientes) y la mantisa (los 23 bits más a la derecha) de un flotante en Java.
Se puede usar el mismo enfoque para dobles (exponente de 11 bits y mantisa de 52 bits).
Crédito: http://sj.github.io/java-float/
fuente
Debería usar doble en lugar de flotante para cálculos precisos, y flotante en lugar de doble cuando use cálculos menos precisos. Flotante contiene solo números decimales, pero doble contiene un número de coma flotante de precisión doble IEEE754, lo que hace que sea más fácil contener y calcular números con mayor precisión. Espero que esto ayude.
fuente
En los cálculos regulares de programación, no usamos float. Si nos aseguramos de que el rango de resultados esté dentro del rango del tipo de datos flotantes, entonces podemos elegir un tipo de datos flotantes para guardar memoria. En general, usamos el doble por dos razones: -
Los tipos de datos flotantes y dobles fueron diseñados especialmente para cálculos científicos, donde los errores de aproximación son aceptables. Si la preocupación principal es la precisión, se recomienda utilizar la clase BigDecimal en lugar de los tipos de datos flotantes o dobles. Fuente: - Tipos de datos flotantes y dobles en Java
fuente