Как в С++ огромное число с плавающей точкой, с точностю до 30 числа после запитой, можна записать в файл(в нормальном виде: 3.443.....)? Стандартные функции, которые используют буфер,записывают максимум 17 цифр,после запитой и не сохраняют позицю запитой.
Идём сюды - http://www.wasm.ru/article.php?article=edfpu01 Смотрим сколько бит отводиться на мантиссу для double и не задаём глупых вопросов.
смотря как число было полученно. стандартные ф-ии работают с вещественными числами и числами двойной точности. согласно стандарту http://en.wikipedia.org/wiki/IEEE_754-1985 вещественные числа состоят из мантисы экспонента и знака. собсно в числах двойной точности мантиса составляет 52 бита, т.е. учитывает 52*lg(2)~=16 разрядов. а положение точки регулируется експонентой (11 бит). както так. смотрите формат в общем... там больше 17цифр и не получится видимо..
SCARHAND При чём здесь код? Когда ты пишешь double x = 3.14xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, то всё что дальше 52-х битов после запятой, просто обрубается.
число огромное - значит много больше единицы. кроме того ещё и после запИтой 30 чисел (знаков наверное?). получается, что точность больше 31 значащей десятичной цифры. вряд ли у вас в программе это число представляется в каком-то особом виде, кроме как float, double и long double. у них намного меньше точность представления, так что все ваши оценки точности - чистые ваши домыслы. сохраняйте, что дано. Борландовская sprintf например поддерживает больше 17 значащих цифр (внутри sprintf используется видимо двойная точность в любом случае, даже если мы будем передавать long double), но всё что после 17 идёт - можно заметить - будет иметь период, т.о. уже проявляется дискретность представления чисел. Информации они не будут нести.