以双C++存储大的十进制数



我昨天提出了一个问题,我认为这个问题被认为是重复的。我需要将10e-16存储在变量中。仅此一项有效,但是一旦我需要从另一个double值中减去它,该数字根本不会改变。只有当我将值从 10e-16 更改为像 10e-4 一样的 somothing 时,它才会开始工作。任何较低的数字似乎都不起作用。我尝试使用长双精度,但无济于事。我不需要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;
    }

这就是循环的样子。函数f1返回非线性方程的值。我尝试过使用 GMP,但在安装它时遇到了问题,我在另一个问题中解决了这个问题。有没有办法在不使用GMP的情况下完成这项工作?

假设您将一个大整数(例如 123,456,123,456)表示为六个有效数字。你会得到:

123,456,000,000

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

123,456,000,000

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

123,456,000,000

以此类推,永远如此。

如果您要添加的数字低于您认为重要的数字的阈值,您可以看到您可以根据需要多次添加该数字,并且您的结果永远不会改变。这基本上就是你试图从一个非常大的double中减去一个非常小的所发生的事情。

最新更新