[计算机组成原理] [主线作业] [第1弹] [TJU - 3014218071]

一、使用 short int 和 float 两种类型的变量计算和验证两个问题。

 1. x ^ 2 >= 0 ?
   
    // 使用 C++ 编码如下(只显示 main 函数内的部分,头文件包括<iostream>, <limits.h>, <float.h>, <stdio.h>):

    // 对于 short int 类型,其范围应为 [-32768,+32767]
   
    for (short int i = -32768; i < 32768; i++)

    {

        if(i ^ 2 - 0 < 0)
            
            cout << "Warning! " << i << "^2 < 0" << endl; 
    }

    // 对于 float 类型,一般由 1符号位+8指数位+23尾数位组成,其范围为[-2^128,+2^128]

    for (float f = FLT_MIN; f <= FLT_MAX; f + 0.1)

    {

        if(f ^ 2 - 0 < 0)
           
            cout << " Warning! " << f << "^2 < 0" << endl;
   
    }   

 2. (X + Y) + Z == X + (Y + Z) ?

    short int i1, i2, i3, int1, int2;

    while (cin >> i1 >> i2 >> i3)

    {

        int1 = (i1 + i2) + i3;

        int2 = i1 + (i2 + i3);

        if (int1 != int2)

            cout << "Warning! " << "( " << i1 << " + " << i2 << " ) + " << i3 << " != " << i1 << " + ( " << i2 << " + " << i3 << " )" << endl;

    }

    float f1, f2, f3, flt1, flt2;

    while (cin >> f1 >> f2 >> f3)

    {

        flt1 = (f1 + f2) + f3;

        flt1 = f1 + (f2 + f3);

        if (flt1 != flt2)

            cout << "Warning! " << "( " << f1 << " + " << f2 << " ) + " << f3 << " != " << f1 << " + ( " << f2 << " + " << f3 << " )" << endl;

    }


二、内存参照错误验证

 1. fun 函数 和 主函数
    
    double fun(int i)

    {

        volatile double d[1] = {3.14};

        volatile long int a[2];

        a[i] = 1073741824;

        return d[0];

    }
    int main()

    {

        for(int i = 0; i < 5; i++)

        {

            cout << fun(i) << endl;

        }

        return 0;

    }

 2. 记录 fun(1)/ fun(2)/ fun(3)/ fun(4) 时的输出结果:
   
    结果如图:

   [计算机组成原理] [主线作业] [第1弹] [TJU - 3014218071]_第1张图片

   

三、总结

       我们发现由于变量类型存在约束范围,会因为变量的溢出而导致结果与自然认知不符;

       同时,由于 ji 算机在进行较大数值 ji 算时会忽略较小数值,造成结果的些许偏差,甚至在二次 ji 算时出现明显的错误。

       这使我们明白,编写程序不能想当然,也应该 kao 虑现实因素:硬件因素,编译因素等。 并且编程过程中的测 shi 也是必不可少的一环。

 

你可能感兴趣的:(不开心,学生作业)