c++ - 无法打破c ++中的无限循环
问题描述
所以我首先在 python 中编写了一个脚本来测试我正在尝试做的事情是否有效,因为我熟悉它(并且确实如此)。它在每个循环中打印 1 到 10 并继续执行此操作。
fullCircle = 2*3.14159
numberOfPoints = 10
def gen():
angle = 0
points = []
while angle < fullCircle:
angle += (1 / numberOfPoints) * fullCircle
points.append(angle)
print(len(points))
while True:
gen()
然后我尝试在 c++ 中编写完全相同的代码,但由于某种原因,循环没有中断,并且即使在之后角度继续增加angle < fullCircle
,我也不知道为什么。
#include <iostream>
#include <vector>
float fullCircle = 2 * 3.14159f;
int numberOfPoints = 10;
std::vector<float> points;
void gen()
{
float angle = 0;
points.clear();
while (angle < fullCircle)
{
angle += (1 / numberOfPoints) * fullCircle;
points.push_back(angle);
std::cout << points.size() << std::endl;
}
}
int main()
{
while (true)
gen();
}
解决方案
在本声明中:
angle += (1 / numberOfPoints) * fullCircle;
numberOfPoints
是一个int
集合10
,整数除法(1 / numberOfPoints)
也是。在普通算术中,是,但整数不能有小数,所以在这种情况下 的结果是 的整数值,因此是,因此不会改变值。(1 / 10)
0.1
(1 / 10)
0
0 * fullCircle
0
angle
如果运算符的操作数之一/
被更新为float
或double
然后将使用浮点除法,导致浮点值0.1
,因此0.1 * fullCircle
不会导致0
,因此angle
将更改值。
最简单的改变是这样的:
float numberOfPoints = 10; // or double
但是其中之一也可以:
int numberOfPoints = 10;
...
angle += (1 / float(numberOfPoints)) * fullCircle;
int numberOfPoints = 10;
...
angle += (1.0f / numberOfPoints) * fullCircle;
推荐阅读
- reactjs - 如何显示
- go - grpc:收到的消息大于最大值(4623947 与 4194304)
- google-api - AttributeError:模块“google.cloud.vision”没有属性“枚举”
- node.js - 我有nodejs但无法通过自制软件升级它,我该怎么办?
- r - 计算表格显示所需的时间
- android - MODE_IN_CALL、MODE_IN_COMMUNICATION、MODE_CALL_SCREENING 有什么区别?
- java - 当我们在Java中将map的键转换为小写时,有没有简单的方法来合并值集?
- github - github 企业是否有 Lucid 图表集成?
- karate - 空手道:带有断言的多行 afterScenario
- java - BindingResult 方法参数的存在确定抛出的异常?