C语言,一个连续计算式sum=PI*(r*r*r)*4/3与sum=(4/3)*PI*(r*r*r)

我绝不挂科 |浏览1049次
收藏|2020/03/04 05:09

满意回答

2020/03/04 05:25

有不同,这里面看的是浮点数和整型数的区别。按照在计算机里乘法规律是从左往右乘,若遇括号先算括号里,如果半径r是3的倍数,你看sum=PI*(r*r*r)*4/3,,那么PI*(r*r*r)*4是浮点数,此时运算/,就是正常运算。但是,对于sum=(4/3)*PI*(r*r*r),先算4/3。在计算机里面5/3,6/5,这些都是结果都是1,对于整型数,/求的是商,而不计余数。4/3代表整型数据,所以/遵守上面规则,那么4/3=1,对于整个式子运算并无影响,但是如果你改成4.0/3.0,这是浮点数,就会正常运算,即(4.0/3.0)*PI*(r*r*r)与PI*(r*r*r)*4/3一样。还有问题吗,谢谢采纳,Thanks♪(・ω・)ノ

木斯皮尔翰

其他回答(1)
  • 不光是位置不同,主要是后者加了括号:(4/3),先计算括号中的两个整数相除,结果也应为整数,即为1,小数后被舍去了。前者先做乘4的,即 PI*(r*r*r)*4,由于 PI*(r*r*r)的结果是实型数,所以相乘结果也为实型数,再除3后,仍为实型数,小数部分都是保留的,没有舍去。所以两者的计算结果就不同了。你可执行下面程序来理解:#include<stdio.h>#define PI 3.14int main(){float sum,r=1.0; sum=PI*(r*r*r)*4/3; printf("%f\n",sum); sum=(4/3)*PI*(r*r*r); printf("%f",sum); return 0;}程序的运行结果,如上分析的:
    回答于 2020/03/04 05:46
0人关注该问题
+1

 加载中...