• 关于涉及到浮点数的运算及输出问题


    浮点数可以用printf(“%.20f ”,a);输出到小数点后20位,但是一般的,如果用cout << a << endl; 或者printf("%lf ",a);这样输出的话,在数据精确度很高的情况下,系统一般会进行四舍五入之后在进行输出,比如说会精确到小数点后六位或者后四位输出。

    可以作为参考的题目第三题
    如果只是单纯的输出最大最小值记录下来再重新输入到系统的话,得到的数据并不精确,所以会导致问题错位,例如这样:

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        double a[35][35];
        memset(a,0,sizeof(a));
        for(int i=0;i<30;i++)
            for(int j=0;j<=i;j++)
                cin >> a[i][j];
    
        for(int i=1;i<30;i++)
        {
            for(int j=0;j<=i;j++)
            {
                if(j==0) a[i][j] += a[i-1][j]/2;
                else if(j==i) a[i][j] += a[i-1][j-1]/2;
                else a[i][j] += a[i-1][j-1]/2 +a[i-1][j]/2;
            }
        }
        double Max = -1,Min = 1000000;
        for(int i=29;i<30;i++)
        {
            for(int j=0;j<=i;j++)
            {
                cout << a[i][j] << " ";
                if(a[i][j] > Max) Max = a[i][j];
                if(a[i][j] < Min) Min = a[i][j];
            }
        }
        printf("%lf %lf
    ",Max,Min);
        double aa=135.349;
        double b=3.88633;
        double x=2086458231;
        printf("%lf
    ",aa*x/b);
        return 0;
    }

    规范的做法应该是在的到Max还有Min之后,直接用Max还有Min进行运算,而不是输出之后再手动输入(这里确实是本人太太太菜了,才会发生这种低级错误)。以下就是正确的代码:

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        double a[35][35];
        memset(a,0,sizeof(a));
        for(int i=0;i<30;i++)
            for(int j=0;j<=i;j++)
                cin >> a[i][j];
    
        for(int i=1;i<30;i++)
        {
            for(int j=0;j<=i;j++)
            {
                if(j==0) a[i][j] += a[i-1][j]/2;
                else if(j==i) a[i][j] += a[i-1][j-1]/2;
                else a[i][j] += a[i-1][j-1]/2 +a[i-1][j]/2;
            }
        }
        double Max = -1,Min = 1000000;
        for(int i=29;i<30;i++)
        {
            for(int j=0;j<=i;j++)
            {
                cout << a[i][j] << " ";
                if(a[i][j] > Max) Max = a[i][j];
                if(a[i][j] < Min) Min = a[i][j];
            }
        }
        //printf("%.20lf %.20lf
    ",Max,Min);
        double x=2086458231;
        printf("%lf
    ",Max*x/Min);
        return 0;
    }
  • 相关阅读:
    Delphi Canvas的FillRect(const Rect: TRect) 函数的作用
    将多个jpg文件以追加形式合并成一个文件_delphi教程 bmp 合并 http://www.west.cn/www/info/58058-1.htm
    早期原版翎风(LF)引擎(M2)源码(Delphi)
    Application.Restore不起作用了
    delphi 函数isiconic 函数 判断窗口是否最小化
    delphi SetWindowPos改变窗体位置和状态
    Linux 软件看门狗 watchdog
    使用Linux C编写看门狗(watchdog)程序
    Linux编程之《看门狗进程》
    Mac PWN入门巩固篇(六)
  • 原文地址:https://www.cnblogs.com/myxdashuaige/p/10510222.html
Copyright © 2020-2023  润新知