C ++ точность чисел и усечение с помощью fstream

У меня есть файл .txt с сотнями номеров.
У них много цифр (максимум 20) после точки, и мне нужно получить их все без усечения, в противном случае они приводят к ошибкам в следующих вычислениях. Я сделал эти числа с помощью Matlab, чтобы он имел чудовищную точность, но теперь я должен повторить это поведение в моей программе.

Я сделал так:

 fstream in;
in.open(file.txt, ios::in);
long double number;
in>>number;

Я тоже пробовал это

 in.precision(20);
in>>number;

перед каждой операцией «>>» но это тщетно

3

Решение

Следующее прекрасно работает в моей системе (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

Если это не работает в вашей системе, то вам нужно использовать стороннюю библиотеку номеров.

1

Другие решения

std::numeric_limits::min std::numeric_limits::digits10 может сказать вам, какова фактическая точность вашей цели long double,

Если вы обнаружите, что этого недостаточно для представления ваших данных, возможно, вам нужна произвольная точность. Вы можете использовать несколько библиотек чисел произвольной точности, ни одна из которых не является стандартной в C ++.

4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector