Ваш вопрос может иметь несколько интерпретаций.
Если это только для углов и для хранения на диске или на устройстве, я бы предложил вам хранить ваши значения, используя совершенно другую технику: хранить как 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 градусов, неплохо :)
person
Salvatore Previti
schedule
28.10.2011