Su pregunta puede tener varias interpretaciones.
Si solo es para ángulos y para almacenar en un disco o en un dispositivo, le sugiero que almacene sus valores usando una técnica totalmente diferente: almacenar como un entero de 32 bits.
int encodedAngle = (int)(value * (0x7FFFFFFF/180.0));
Para recuperarlo, haga lo contrario.
double angle = (encodedAngle/(0x7FFFFFFF/180.0));
De esta forma tiene una resolución de 31 bits completa para 180 grados y 1 bit para el letrero.
Puede usarlo también para mantener sus valores en RAM, el costo de esta cobertura es más alto en comparación con trabajar directamente con dobles, pero si desea mantener baja la memoria pero con una resolución alta, esto puede funcionar bastante bien. El costo no es tan alto, solo una conversión de/a entero de/a doble y una multiplicación, los procesadores modernos lo harán en muy poco tiempo, y dado que la memoria accedida es menor, si la lista contiene mucho de valores, su código será más amigable con la memoria caché del procesador.
Su resolución será 180/((2^31) - 1) = 8.38190318 × 10^-8
grados, no está mal :)
Las longitudes varían de -180 a 180 y las latitudes de -90 a 90. – caf
Buen punto, corregirlo. – Robert