C++ precision of numbers and truncation with fstream

后端 未结 2 648
南笙
南笙 2021-01-20 02:40

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

相关标签:
2条回答
  • 2021-01-20 03:06

    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++.

    • boost::multiprecision
    • GNU MP
    • MPFR
    0 讨论(0)
  • 2021-01-20 03:29

    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.

    0 讨论(0)
提交回复
热议问题