Ваш вопрос может иметь несколько интерпретаций.
Если это только для углов и для хранения на диске или на устройстве, я бы посоветовал вам хранить ваши значения, используя совершенно другую технику: хранить как 32-битныецелое число.
int encodedAngle = (int)(value * (0x7FFFFFFF / 180.0));
Чтобы восстановить его, выполните обратное.
double angle = (encodedAngle / (0x7FFFFFFF / 180.0));
Таким образом, вы получите полное разрешение 31 бит для 180 градусов и 1 бит для знака.
Вы также можете использовать этот способ для сохранения значений в оперативной памяти, стоимость этого покрытия выше по сравнению с работой напрямую с двойными значениями, но если вы хотите, чтобы ваша память была низкой, а разрешение высоким, это может работать довольно хорошо.Стоимость не так высока, просто преобразование в / из целого числа из / в удвоение и умножение, современные процессоры сделают это за очень короткий промежуток времени, и поскольку доступ к памяти меньше, если список содержит многозначения, ваш код будет более дружественным с кешем процессора.
Ваше разрешение будет 180 / ((2^31) - 1) = 8.38190318 × 10^-8
градусов, неплохо:)