Java doble vs BigDecimal para latitud/longitud
double geospatial (6)
El uso del doble tiene la precisión suficiente para una precisión de lat / lon hasta pulgadas para 6-7 posiciones decimales. En aviación, si se utilizan grados decimales, por lo general van a al menos 7 lugares decimales. En nuestras simulaciones de la NASA, los datos de lat / lon se duplican mientras que todas las demás actitudes y altitudes son flotantes. En otras palabras, el sexto lugar decimal para la altitud no es significativo, mientras que el sexto lugar decimal para lat / lon es para la precisión del sub-pie. No debe usar el flotador para lat / lon si necesita precisión hasta sub-pies.
Puedes jugar en Google Earth para ver qué precisión obtienes al colocar marcadores y manipular el último dígito decimal.
Al almacenar latitudes / longitudes que son típicamente del formato: 44.087585 (es decir, un máximo de 2 números antes del punto y 6dp), ¿debo molestarme con bigdecimals?
La peor precisión de almacenamiento como doble es de aproximadamente 3 nm.
Si quieres calcularlo en Java:
Math.ulp((double) 180) * 60 * 1852
3.1582203519064933E-9
Como bonificación; La peor precisión que se obtiene al almacenar en flotadores es de 1,7 metros.
Si desea controlar los nano-robots en sus nano-viajes utilizando nano-GPS, vaya a BigDecimal. De lo contrario, flotar / doble es suficiente.
Si le preocupa la precisión, probablemente debería ir con BigDecimal
por muchos motivos que se tratan en esta publicación . Dicho esto, double
o float
debería estar bien para almacenar lo que necesita en términos de poder satisfacer el rango de valores que necesita.
Con solo seis lugares decimales de precisión, no creo que double
o float
te hagan tropezar, pero si comienzas a agregar los valores de alguna manera, las pequeñas imprecisiones pueden comenzar a sumarse.
Un double
tiene suficiente precisión para almacenar eso. Sin embargo, cuando se muestra a los usuarios, use una cadena de formato como %.6f
para no imprimir los dígitos de basura.
double
debe estar bien para latitudes / longitudes. BigDecimal
vuelve más importante una vez que comienza a manipular la moneda o necesita tener más control sobre la precisión.