У меня есть файл .txt с сотнями номеров.
У них много цифр (максимум 20) после точки, и мне нужно получить их все без усечения, в противном случае они приводят к ошибкам в следующих вычислениях. Я сделал эти числа с помощью Matlab, чтобы он имел чудовищную точность, но теперь я должен повторить это поведение в моей программе.
Я сделал так:
fstream in;
in.open(file.txt, ios::in);
long double number;
in>>number;
Я тоже пробовал это
in.precision(20);
in>>number;
перед каждой операцией «>>» но это тщетно
Следующее прекрасно работает в моей системе (Win7, VS2012):
#include <fstream>
#include <iostream>
int main (void)
{
std::ifstream file ("test.txt") ;
long double d = 0 ;
file >> d ;
std::cout.precision (20) ;
std::cout << d << "\n" ;return 0 ;
}
Текстовый файл:
2,7239385667867091
Выход:
2,7239385667867091
Если это не работает в вашей системе, то вам нужно использовать стороннюю библиотеку номеров.
std::numeric_limits::min
std::numeric_limits::digits10
может сказать вам, какова фактическая точность вашей цели long double
,
Если вы обнаружите, что этого недостаточно для представления ваших данных, возможно, вам нужна произвольная точность. Вы можете использовать несколько библиотек чисел произвольной точности, ни одна из которых не является стандартной в C ++.