Запись дробных чисел в файл

Тема в разделе "LANGS.C", создана пользователем SCARHAND, 31 май 2009.

  1. SCARHAND

    SCARHAND New Member

    Публикаций:
    0
    Регистрация:
    31 май 2009
    Сообщения:
    6
    Как в С++ огромное число с плавающей точкой, с точностю до 30 числа после запитой, можна записать в файл(в нормальном виде: 3.443.....)? Стандартные функции, которые используют буфер,записывают максимум 17 цифр,после запитой и не сохраняют позицю запитой.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Идём сюды - http://www.wasm.ru/article.php?article=edfpu01
    Смотрим сколько бит отводиться на мантиссу для double и не задаём глупых вопросов.
     
  3. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    смотря как число было полученно.
    стандартные ф-ии работают с вещественными числами и числами двойной точности. согласно стандарту http://en.wikipedia.org/wiki/IEEE_754-1985 вещественные числа состоят из мантисы экспонента и знака. собсно в числах двойной точности мантиса составляет 52 бита, т.е. учитывает 52*lg(2)~=16 разрядов. а положение точки регулируется експонентой (11 бит).
    както так. смотрите формат в общем... там больше 17цифр и не получится видимо..
     
  4. SCARHAND

    SCARHAND New Member

    Публикаций:
    0
    Регистрация:
    31 май 2009
    Сообщения:
    6
    Я конечно неспециалист, ну Вы можете показать пример кода?
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    SCARHAND
    При чём здесь код? Когда ты пишешь double x = 3.14xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
    то всё что дальше 52-х битов после запятой, просто обрубается.
     
  6. Dukales

    Dukales New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2009
    Сообщения:
    199
    число огромное - значит много больше единицы. кроме того ещё и после запИтой 30 чисел (знаков наверное?). получается, что точность больше 31 значащей десятичной цифры. вряд ли у вас в программе это число представляется в каком-то особом виде, кроме как float, double и long double. у них намного меньше точность представления, так что все ваши оценки точности - чистые ваши домыслы. сохраняйте, что дано. Борландовская sprintf например поддерживает больше 17 значащих цифр (внутри sprintf используется видимо двойная точность в любом случае, даже если мы будем передавать long double), но всё что после 17 идёт - можно заметить - будет иметь период, т.о. уже проявляется дискретность представления чисел. Информации они не будут нести.