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
и т.д.
с маленькими значениями такого нет а вот с большими есть.
Может кто подсказать что делать или какую библиотеку использовать?
Запись вещественных чисел в файл С++
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
-
- Сообщения: 1213
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Если хочешь работать с плавающей запятой так же как и со строками произвольной длины, то нужна библиотека GMP https://gmplib.org/.
Если хочешь понять почему так бывает надо разобраться что такое "машинный эпсилон".
Если хочешь понять почему так бывает надо разобраться что такое "машинный эпсилон".
2B OR NOT(2B) = FF
У меня получился вывод:
Суть в отм, что во время этих операций:
n - это очень маленькое число и оно не прибавляется к x и num и они так и остаются 0.067, отсюда не работает цикл программы и крашится вся программа - виснет, если быть точным. Другие библиотеки и прочая муть тут не причем.
Это все связано с внутренним утройством вещественных чисел. Разберитесь и почитайте про это. Муть, кстати полнейшая. Видимо здесь не хватает просто мантиссы для осуществления операций и все.
Слишком сильно числа раскидали:
0.067000000000000000000000000000 и
0.000000000000000000000000000001.
Код: Выделить всё
0.067000
0.067000
0.067000
0.067000
0.067000
0.067000
0.067000
0.067000
0.067000
0.067000
0.067000
0.067000
0.067000
0.067000
0.067000
0.067000
0.067000
0.067000
0.067000
0.067000
0.067000
Код: Выделить всё
x = x + n;
num = num + n;
Это все связано с внутренним утройством вещественных чисел. Разберитесь и почитайте про это. Муть, кстати полнейшая. Видимо здесь не хватает просто мантиссы для осуществления операций и все.
Слишком сильно числа раскидали:
0.067000000000000000000000000000 и
0.000000000000000000000000000001.