使用长双

时间:2015-07-18 06:30:36

标签: c++ pi long-double

以下是我的C ++程序。我想在变量上存储一个长数字,例如pi,所以我试图使用long double。但是当我运行程序时它只显示3.14159。如何将完整的浮点数存储到变量?

document.getElementById('x'+i+'y'+j).value

3 个答案:

答案 0 :(得分:3)

使用流操纵器,很简单:

#include <iostream>
#include <iomanip>

int main()
{

    long double pi;
    pi = 3.14159265358979323846264338327950288419716939937510L; // L for long double literal

    std::cout << "PI: " << std::setprecision(20) << pi;


}

答案 1 :(得分:3)

这里的问题是long double的精度有限。考虑这个(C++11

#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>
using namespace std;

int main() {
    cout.precision(51);
    std::string pi("3.14159265358979323846264338327950288419716939937510");
    cout << pi << endl;
    cout << stold(pi) << endl;
    cout << M_PIl << endl;        /// The constant from <math.h>
}

<强>输出

3.14159265358979323846264338327950288419716939937510
3.14159265358979323851280895940618620443274267017841
                    ^ value changes from here (18th decimal place)
3.14159265358979323851280895940618620443274267017841

答案 2 :(得分:1)

将值存储在long double中没有问题(实际上存在精度问题)。问题在于打印它。

请改为尝试:

cout << "PI = " << setprecision(40) << pi << endl;

如果您尝试以上操作,您会发现实际打印的值将在一些小数位后开始丢失精度(我猜是18-25).c / c ++中long double的精度是实施定义。因此,您需要检查系统是否存在长双倍存储的最大精度。