Есть 64битное число с фиксированной точкой, которое нужно преобразовать в число с плавающей точкой:
unsigned long fixed = 0x8000000000000001; // Q4.60
double floating = fixed/pow(2,60);
printf("%.100e\n",floating);
/* Вывод: 8.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00 */
По расчетам должно получится число 8 + 2^(-60), однако, почему-то, здесь получается целое число. Дробь пропадает после определенного значения (крайнее число 0x8000000000000401; при нем floating равно 8.00000000000000177635683940025046467781066894531250e+00).
Подскажите пожалуйста, в чем проблема?