c++ - 表中零的无限循环
问题描述
此代码将一个圆分成 X 部分并显示每个部分的弧度值表。但是当我使用高于 6 且低于 6 的值时,我得到一个 0 显示的无限循环,我得到 '0 1 2 3 4 5 6' 似乎显示的值也不是浮动的。我有使用度数的代码并且工作正常。
#include <iostream>
using namespace std;
#define pi 3.14159265359
#define pi2 6.28318530718
int nbObjets = 0;
void objetsPositionRadian(int tab[], int nbObjets);
int main(){
int tabRadian[] = {0};
std::cout << "Nombre d'objets ? ";
std::cin >> nbObjets;
objetsPositionRadian(tabRadian, nbObjets);
return 0;
}
void objetsPositionRadian(int tab[], int nbObjets){
float radian = (360/nbObjets) * (pi/180);
for (int i = 0; i < pi2; i+=radian){
std::cout << i << " ";
}
std::cout << endl;
}
解决方案
这里明显的举动是将i
循环更改为 a double
(or float
) 而不是int
.
除此之外,在计算 时radian
,360/nbObjets
会进行整数除法,因此如果nbObjets
> 360,它将给出 0 的结果。更改360
为360.0
修复该问题。
但这留下了另一个问题:根据浮点数学的变幻莫测,如果你要求很多对象,有一个很好的变化,你最终会计算出比你要求的多一个对象的位置(并且可以想象甚至更多如果您要求的对象数量非常多)。
这个问题是由于您在循环中添加radian
的累积错误引起的。i
而不是这样做,你几乎肯定想要这个订单上的东西:
for (int i=0; i<nbObjets; i++)
cout << i * radian;
这样,您始终可以准确地获得所需的对象数量,并且值中的任何可能错误都不会从一次迭代到下一次迭代累积。
推荐阅读
- python - 无论使用 Numpy 的元素顺序如何,如何在不同的数组中找到相同的行?
- c++ - 主函数中的字符串不向类发送信息
- c - 无法通过系统调用
- android - Android CameraX - 相机预览在第一次调用 captureUseCase.takePicture() 时冻结
- javascript - Gulp:向文件名添加后缀时出现 dest.on 错误。关于如何解决的任何想法?
- python - Python PyMuPDF 循环下一页
- python - 交互式python子进程中的额外回车
- jquery - 已旋转列标题
- javascript - 如何使用 es6 解析 json?
- r - 我试图在 ggplot 中循环将结果保存到列表中