+ Ответить в теме
Показано с 1 по 3 из 3

Тема: Запись вещественных чисел в файл С++

  1. #1
    Влад.Променик is on a distinguished road
    Регистрация
    12.12.2017
    Сообщений
    1
    Вес репутации
    0

    По умолчанию Запись вещественных чисел в файл С++

    num = 0.067000000000000000000000000000;
    x = 0.067000000000000000000000000000;
    n = 0.000000000000000000000000000001;

    while (x <= 0.100000000000000000000000000000)
    {
    x = x + n;
    num = num + n;
    file << std::setprecision(30) << std::fixed << num << std::endl;
    }
    в файле получаю значения
    ...
    0.067000000000000003996802888651
    0.067000000000000003996802888651
    0.067000000000000003996802888651
    ....
    а нужно
    0.067000000000000000000000000001
    0.067000000000000000000000000002
    0.067000000000000000000000000003
    и т.д.
    с маленькими значениями такого нет а вот с большими есть.
    Может кто подсказать что делать или какую библиотеку использовать?

  2. По умолчанию

     
    Хотите избавиться от рекламы? Зарегистрируйтесь
  3. #2
    Moderator Куратор
    system architect
    Absurd is on a distinguished road
    Регистрация
    26.02.2004
    Адрес
    Pietari, Venäjä
    Возраст
    38
    Сообщений
    1,213
    Вес репутации
    17

    По умолчанию Re: Запись вещественных чисел в файл С++

    Если хочешь работать с плавающей запятой так же как и со строками произвольной длины, то нужна библиотека GMP https://gmplib.org/.
    Если хочешь понять почему так бывает надо разобраться что такое "машинный эпсилон".
    2B OR NOT(2B) = FF

  4. #3
    developer Слива is on a distinguished road
    Регистрация
    19.03.2016
    Сообщений
    133
    Вес репутации
    3

    По умолчанию Re: Запись вещественных чисел в файл С++

    У меня получился вывод:
    Код :
    1. 0.067000
    2. 0.067000
    3. 0.067000
    4. 0.067000
    5. 0.067000
    6. 0.067000
    7. 0.067000
    8. 0.067000
    9. 0.067000
    10. 0.067000
    11. 0.067000
    12. 0.067000
    13. 0.067000
    14. 0.067000
    15. 0.067000
    16. 0.067000
    17. 0.067000
    18. 0.067000
    19. 0.067000
    20. 0.067000
    21. 0.067000
    Суть в отм, что во время этих операций:
    Код :
    1. x = x + n;
    2. num = num + n;
    n - это очень маленькое число и оно не прибавляется к x и num и они так и остаются 0.067, отсюда не работает цикл программы и крашится вся программа - виснет, если быть точным. Другие библиотеки и прочая муть тут не причем.
    Это все связано с внутренним утройством вещественных чисел. Разберитесь и почитайте про это. Муть, кстати полнейшая. Видимо здесь не хватает просто мантиссы для осуществления операций и все.
    Слишком сильно числа раскидали:
    0.067000000000000000000000000000 и
    0.000000000000000000000000000001.

+ Ответить в теме

Похожие темы

  1. Последовательность вещественных чисел...
    Помогите пожалуйста решить задачу: Вводится последовательность вещественных чисел, оканчивающаяся нулём, и состоящая более чем из одного...
    от iron-mik в разделе задачи на Паскале и Delphi
  2. Сравнение последовательностей вещественных чисел на сходство
    Здравствуйте. Помогите пожалуйста, подкините идейку. Есть два множества последовательностей вещественных чисел, каждая последовательность имеет...
    от Blind Guardian в разделе Алгоритмы
  3. потоковая запись в файл
    Примитивный и в то же время непонятный мне момент по поводу записи в потоке в файл Вещественных или целых чисел Классический код, приведённый в...
    от eugira в разделе C и C++
  4. запись в txt файл
    Здравствуйте. Такая проблема: Имеется диалог, а на нём конпка и EditBox. Я хочу чтобы при нажатии на кнопку, текст, введённый в EdiBox e...
    от pominub в разделе C и C++

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения