gpt4 book ai didi

c++ - 这两个函数的操作顺序是什么

转载 作者:行者123 更新时间:2023-12-01 14:03:45 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why does dividing two int not yield the right value when assigned to double?

(10 个回答)


去年关闭。




当我遇到问题时,我正在编写一个函数来计算球体的体积,但我不知道为什么如果将 4/3 * PI 更改为 PI * 4/3 我得到了不同的结果。
评估的顺序是什么,如果我使用 (4/3) * PI 和 PI * (4/3) 这样的括号,我在这两种情况下都得到了错误的答案。

#define PI 3.141592

float Volume(int radius){
return (4/3 * PI * pow(radius, 3));
}

float Volume(int radius){
return (PI * 4/3 * pow(radius, 3)); //the good one
}

最佳答案

根据 C++ 标准(5.6 乘法运算符)

1 The multiplicative operators *, /, and % group left-to-right.



因此这个表达式
4/3 * PI 

被评估为
( 4/3 ) * PI 

所以在这个子表达式中 4 / 3使用了整数运算,结果等于 1 .

这个表情
PI * 4/3

也是从左到右评估的
( PI * 4 )/3

但在这种情况下,使用了浮点算法。操作数 4转换为变量 PI 的类型由于通常的算术转换,它具有 double 类型。然后依次操作数 3也被转换为 double 类型,因为它的左操作数(表达式) ( PI * 4 )有 double 型。

在这个表达式中
PI * (4/3)

括号内再次使用整数运算,子表达式的结果是 1 .

关于c++ - 这两个函数的操作顺序是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61491200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com