C++ 在双C+中存储大十进制数+;

C++ 在双C+中存储大十进制数+;,c++,C++,我昨天问了一个问题,我想是弄错了,被当作是重复的。我需要将10e-16存储在变量中。这一点单独起作用,但只要我需要从另一个double值中减去它,这个数字就不会改变。只有当我将值从10e-16更改为类似10e-4的值时,它才会开始工作。任何更低的数字似乎都不起作用。我试过用长双色,但没用。我不需要cout.precision() long double x1 = -400, epsilon = 0.000000000000001; long double x2 = -400 + epsilon;

我昨天问了一个问题,我想是弄错了,被当作是重复的。我需要将
10e-16
存储在变量中。这一点单独起作用,但只要我需要从另一个
double
值中减去它,这个数字就不会改变。只有当我将值从
10e-16
更改为类似
10e-4
的值时,它才会开始工作。任何更低的数字似乎都不起作用。我试过用长双色,但没用。我不需要
cout.precision()

long double x1 = -400, epsilon = 0.000000000000001;
long double x2 = -400 + epsilon;
vector <vector <double> > intervals;
vector <double> interval;


while(x1<=650){
    interval.clear();
    if(f1(x1)<0){
        while(f1(x2) <= 0){
            x2 += epsilon;
        }
        while(f1(x1)<0){
            x1 += epsilon;
        }
        x1 -= epsilon;
        interval.push_back(x1);
        interval.push_back(x2);
        intervals.push_back(interval);
        x1=x2;
        x2=x1 + epsilon;
    }
长双x1=-400,ε=0.000000000000001;
长双x2=-400+ε;
向量间隔;
向量区间;

而(x1假设您将一个大整数(比如123456123456)表示为六位有效数字。您将得到:

123,456,000,000
然后将1加上,得到结果123456000001。如果将其表示为六个有效数字,则得到:

123,456,000,000
如果将1再次添加到12345600000,则六位有效数字的结果为:

123,456,000,000
永远如此


如果你添加的数字低于你认为重要的数字的阈值,你可以看到你可以按你喜欢的次数添加这个数,而且你的结果永远不会改变。这基本上就是你试图从一个非常大的代码中减去一个非常小的<代码>双< /代码>所发生的事情。所有的操作都是二进制的,可以使用任意多的位。有人告诉你,

double
只能容纳固定的位数。因此,这与输出选项无关。你可以尝试创建自己的固定十进制数类型。你可能会发现这个参考更容易理解:我敦促你停止你正在做的事情,并真正取消它明白了,非常感谢,现在我明白了。