user3290180
user3290180

Reputation: 4410

C++ precision of numbers and truncation with fstream

I have a file.txt with hundreds of numbers. They have many digits (max 20) after the point and I need to get them all without truncation, otherwise they introduce errors in the following computations. I made these numbers with matlab so it has a monstrous precision but now I must replicate this behaviour in my program.

I've done this way:

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

I also tried this

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

before each ">>" operation but it is vain

Upvotes: 3

Views: 3230

Answers (2)

Brian Cain
Brian Cain

Reputation: 14619

std::numeric_limits::min std::numeric_limits::digits10 can tell you what your target's actual precision is for long double.

If you find that it's insufficient to represent your data, you probably want arbitrary precision. There are a couple of arbitrary precision number libraries you can use, none of which are standard in C++.

Upvotes: 4

jliv902
jliv902

Reputation: 1658

The following works fine on my system (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 ;
}

The text file:

2.7239385667867091

The output:

2.7239385667867091

If this doesn't work on your system, then you need to use a third-party number library.

Upvotes: 1

Related Questions