Представление двойного числа не является десятичным - оно является двоичным (как и все другие числа в компьютере).Проблема, которую вы определили, не имеет особого смысла.Рассмотрим пример: число 1.2 преобразуется в двоичное - 1 + 1/5 = 1. (0011) двоичное [0011 в период].Если вы урежете его до 52 бит точности (двойной) - вы получите двоичный файл 1,0011001100110011001100110011001100110011001100110011, который равен 1+ (1-1 / 2 ^ 52) / 5.Если вы представите это число точно в десятичной форме, вы получите 52 десятичных знака перед всеми нулями, что намного больше, чем максимальная десятичная точность двойного числа, равного 16 цифрам (и все эти цифры представления от 17 до 52 просто бессмысленны).
В любом случае, если у вас есть чисто абстрактная проблема (как в школе):
int f( double x )
{
int n = 0;
x = fabs(x);
x -= floor(x);
while( x != floor(x) )
{
x *= 2;
++n;
}
return n;
}
Функция возвращает число двоичных цифр перед всеми нулями, а также число десятичных цифр передвсе нули (последняя десятичная цифра всегда 5, если возвращаемое значение> 0).