首页 > 代码库 > [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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。