【发布时间】:2021-12-13 11:38:53
【问题描述】:
我需要编写一个程序来使用公式V=(4/3)*pi*r^3计算球体的体积
有什么区别
volume_sphere = (4/3)*pi*r*r*r;
和
volume_sphere = (4/3.0)*pi*r*r*r;
?
当我输入 3 作为我的 r 的值时,前者给了我一个错误的答案 (84.823196)。但是,当我使用后者(带有“.0”)时,它给了我正确的答案(113.0976)。
我对“.0”的区别感到很困惑。谢谢你的回答!
【问题讨论】:
-
3是int文字,3.0是double文字。使用.0是确保将数字文字键入为double的惯用方式。您可以使用f作为后缀而不是.0来使用float(单精度)而不是double或使用l或L作为long double。 -
没有
.0你有一个整数文字,4/3执行整数除法(产生1) -
因为
4和3都是整数,所以除法4 / 3是整数除法,结果是整数。如果其中一个数字是一个浮点数(3.0是一个double值)那么它将变成一个浮点运算,结果为浮点数。 -
另一个选项是
pi * r * r * r * 4 / 3。括号的删除意味着4 / 3的计算不是独立于表达式的其余部分。 -
正如@WeatherVane 所说,操作的顺序很重要,这些操作的操作员优先级也很重要。因为你有带括号的操作,所以先解决;如果您有一个“数学等效”运算,其中一个操作数已经是浮点数,那么结果也将被计算为浮点数。
标签: c floating-point integer-arithmetic binary-operators