这个代码中的huge为什么要设置成1e9?

图片说明

为什么设置huge=1e9?while 的条件为什么这么设置?

#include <stdlib.h>
#include <stdio.h>
int main()
{
    int T,n;
    scanf("%d",&T);

    int a[101];
    double r,X,Y,Z,x;
    long long  huge=1e9;

    for (int i=0;i<T;i++) {


        scanf("%d\n",&n);
        for (int j=1;j<=n+1;j++) {
            scanf("%d",&a[j]);
        }

        double MIN=-1.0,MAX=1.0;

        while ((MAX-MIN)*huge>1.0) {
            r = (MIN+MAX)/2;

        X = a[1]*-1;
        x = 1 + MIN;
        for (int k=2;k<=n+1;k++) {
            X *= x;
            X += a[k];
        }

        Y= a[1]*-1;
        x = 1 + MAX;
        for (int k=2;k<=n+1;k++) {
            Y *= x;
            Y += a[k];
        }

        Z= a[1]*-1;
        x = 1 + r;
        for (int k=2;k<=n+1;k++) {
            Z *= x;
            Z += a[k];
        }

        if (X*Z>0) {
            MIN = r;
        }else {
            MAX = r;
        }
        }
    r = (MIN+MAX)/2;
    printf("case #%d:\n",i);
    if ((r-0)*huge<1.0 && (r-0)*huge>-1.0) {
        printf("0.0000%%\n");
    }else {
        printf("%.4f%%\n",r*100);
        }

    }

    return 0;
}

为了防止rounding带来的误差导致错误的计算结果,例如
MAX=1.00000000001
MIN=1.0000000002
MAX-MIN=0.0000000001
rounding之后结果变为0(假设之保留小数点后9位)
如果先给结果乘以huge(1e9),那么rounding之前的结果变为0.1,rounding之后的结果也还是0.1,以此可以判断MAX和MIN不一样。

注:程序中通过和1.0来比较来判断MAX和MIN是否相等,你可以通过控制1.0来控制想要的精度。