c++ - 乘法期间的 C++ 运算顺序
问题描述
我正在用 C++ 编写一个简单的程序,我注意到当我在乘以一些数字的同时切换顺序时,我得到了 2 个不同的输出并且无法弄清楚为什么会发生这种情况。
void multiplier()
{
double r, v1, v2;
cout << "Enter the value of r" << endl;
cin >> r;
v1 = 4/3*M_PI*r*r*r;
cout << v1 << endl;
v2 = M_PI*4/3*r*r*r;
cout << v2 << endl;
}
第二个输出是根据计算器的正确输出。
解决方案
这里发生的是整数除法和浮点除法之间的区别。乘法和除法从左到右解释。在第一种情况下,首先4/3
读取 。当您编写4/3
时,编译器将其解释为整数除法,这将返回1
. 但是,在第二种情况下,M_PI*4
将当前值变为 a double
,因此当您接下来除以 3 时,程序会执行浮点除法,从而为您提供正确答案。
推荐阅读
- php - 用 in 数组循环一个数组
- wordpress - 带有测试电子邮件环境的 Wordpress docker 容器
- laravel - 来自带有 formData 的帖子的空响应
- java - 尝试使用反编译的应用程序文件打开应用程序
- pascals-triangle - 第 n 行证明中的帕斯卡三角形第 k 个系数
- android - AudioRecorder 将相同的数据写入两个通道
- javascript - 如何在自定义页面(不是商店/产品页面)上添加到购物车按钮 Woocommerce
- c# - Linq 包含/排除逻辑
- apache-superset - 如何从 Superset 用户界面更改 Apache Superset 模板?
- unicode - Openpyxl Unicode 解码错误无法从单元格值中删除 \ufeff