|
发表于 2022-5-12 21:36:32
|
显示全部楼层
还是S1E6这个题目,请问 pow(2,i) 里面没有小数,即便是double类型,为什么在 i = 53 时,出现了计算多出1的情况呀?
为什么利用中间变量的情况就不会发生这种情况呢?- #include <stdio.h>
- #include <math.h>
- int main(){
- unsigned long long sum = 0;
- unsigned long long n = 0;
- unsigned long long temp = 0;
- int i;
- int k = 0;
- for(i = 0;i<64; i++ ){
- sum += pow(2,i);
- temp = pow(2,i);
- n = n + temp;
- if(i == 52){
- printf("i = %d\n",i);
- printf("n = %llu\n",n);
- printf("sum = %llu\n",sum);
- printf("temp = %llu\n",temp);
- }
- if(sum != n && k == 0){
- k = 1;
- printf("i = %d\n",i);
- printf("n = %llu\n",n);
- printf("sum = %llu\n",sum);
- printf("temp = %llu\n",temp);
-
- }
-
- }
-
- printf("一共应给予%llu粒麦子\n",sum);
- printf("共%llu公斤麦子\n",sum/25000);
- return 0;
- }
复制代码 |
|