Форматирование printf
здесь не проблема. Это тип данных, который есть.
Числа с плавающей точкой в C используют кодировку IEEE 754.
Этот тип кодирования использует знак, значение и показатель степени.
Из-за этой кодировки многие числа будут иметь небольшие изменения, чтобы их можно было сохранить. Кроме того, число значащих цифр может немного измениться, поскольку это двоичное представление, а не десятичное.
Одинарная точность (float
) дает вам 23 бита значения, 8 битов показателя степени и 1 знаковый бит.
Двойная точность (double
) дает вам 52 бита значений, 11 битов показателя степени и 1 знаковый бит.
Наименьшее положительное число, которое вы можете сохранить в двойном значении, составляет примерно 2⨯10-308, не считая денормализованных чисел, которые могут быть меньше. Они имеют эквивалент примерно 15-17 цифр точности, что достаточно для измерения диаметра Земли с точностью до размера эритроцита, самой маленькой клетки в организме человека.
Следовательно, вам нужна библиотека больших чисел для решения вашей проблемы.
Я предлагаю HPALIB , поскольку это простой инструмент для решения вашей проблемы. Пожалуйста, будьте осторожны, что такое большое число займет много памяти.