今天学习循环控制做题的时候需要一个问题
发现int类型与double类型运算后赋值给double类型会产生问题
发现是因为int类型如果和double类型运算的运算逻辑是 int类型和int先进行运算 然后会存在一个以int为类型的内存地址中 但是例如 1/2 储存到int 类型中会先舍去小数位 结果导致为0
有点绕 请看下方实例(如有不对欢迎指正)
这里是其中一种处理方法直接将h 也是运算的一部分定义为double类型会通过运算自动类型提升到double就可以赋值了
原题如下
//求出1- 1/2 + 1/3 - 1/4 …..1/100的和。
先贴出来正确写法(是能算出来的写法QAQ 【狗头保命】)
//求出1- 1/2 + 1/3 - 1/4 …..1/100的和。
//这里是其中一种处理方法直接将h
//也是运算的一部分定义为double类型会通过运算自动类型提升到double就可以赋值了
double d = 1.0 ,h = 1;
for (int i = 2; i <= 100 ; ++i) {
if(i%2==0){
//或者直接在后面*1.0
d -= h *1.0/i;
} else{
//或者直接在后面*1.0
d += h*1.0/i;
}
}
printf("算出的和为:%lf",d);
下方为解决问题步骤
我开始是这样定义的
这是错误的方式
发现问题
double d = 1.0;
for (int i = 2; i <= 100 ; ++i) {
if(i%2==0){
d -= 1/i;
} else{
d += 1/i;
}
}
printf("算出的和为:%lf",d);