首页 > 代码库 > [PCS] Hw1. Short int & Float

[PCS] Hw1. Short int & Float

一、使用 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) 时的输出结果:

结果如图:

   技术分享

三、总结

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

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

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

[PCS] Hw1. Short int & Float