GYueryue 2020-01-30 23:03 采纳率: 33.3%
浏览 573

这个代码中的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;
}
  • 写回答

1条回答 默认 最新

  • zhanglx20 2020-02-11 03:48
    关注

    为了防止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来控制想要的精度。

    评论

报告相同问题?

悬赏问题

  • ¥15 vue使用gojs,需求在link中的虚线上添加方向箭头
  • ¥15 CSS通配符清除内外边距为什么可以覆盖默认样式?
  • ¥15 SPSS分类模型实训题步骤
  • ¥15 求解决扩散模型代码问题
  • ¥15 工创大赛太阳能电动车项目零基础要学什么
  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
  • ¥15 pycharm输出和导师的一样,但是标红