尝试获得两个数字的"adjusted"比率
Trying to get an "adjusted" ratio of two numbers
我想做这个
我有两个数字,A和B,其中A可以大于或小于B。我想做的是:
-
比较B和A
-
如果他们的比率是一个范围的"ouside",那么取一个随机数并将其添加到"a"-现在检查他们的新比率是否符合条件
0.95 < ratio < 1.05
-
如果没有,尝试另一个随机。
我的问题是我遇到了无限循环。。。这就是我所做的:
float ratio = A/B;
if (ratio < 0.95 || ratio > 1.05) {
do {
// randomly take a negative or positive number
float random_n = ((float)rand())/RAND_MAX - 0.50;
// get an even smaller step
random_n *= 0.1;
// add or subtract the random number (depending on its sign)
A += random_n;
// form the ratio again
ratio = A / B;
cout << "lets see " << A << " " << B << " " << ratio << endl;
}
while (ratio > 0.95 || ratio < 1.05);
}
条件应该是:
while (ratio <= 0.95 || ratio >= 1.05);
你把"<"answers">"搞混了比率小于或等于0.95或大于或等于1.05,则不是在0.95和1.05之间。
如果你记得如何否定连词,就很容易避免这样的错误:
NOT(0.95<比值<1.05)===NOT====[…]
规则是:将每个AND更改为OR并否定所有子表达式:
[…]===(NOT(0.95<比率)或NOT[比率<1.05))====(0.95>=比值OR比值>=1.05)===
您的do..while循环条件应该是
while(ratio <= 0.95 || ratio =>1.05)
问题是你增加了A而从未改变B
并且仍然期望比率在(0.95,1.05)。这取决于A和B的初始值来打破循环。
尝试:
B=rand()%RAND_MAX;
do {
A=rand()%RAND_MAX;
ratio = A/B;
cout<<"lets see "<< A <<" "<< B <<" "<<ratio<<endl;
}while(ratio <0.95 || ratio>1.05);
然后可以根据你的需要将A和B除以10的幂。
对于连续运行的不同随机值,也使用srand(time(0))
。
相关文章:
- C++通过数字比较两个数字
- 将向量之间的数字放在另一个向量之间<vector>>如果两个数字的差值为 1
- 在 txt 文件中显示前两个数字的程序
- 两个有符号数字之间的距离
- 形成一个斐波那契三角形,使得每个数字是上面左对角线或右对角线上两个数字的总和
- 将数字表示为两个三角形数字的总和
- 两个数字的对称配对功能
- 无法理解代码背后的逻辑,这是在两个给定数字之间生成素数的优化问题
- 查找中间两个数字的正则表达式的匹配项
- 使用C++具有两个数字的最短路径算法.(C++)
- 将两个数字添加为链表
- C++ 分段错误:11 错误,同时编码将两个数字相加的链接列表
- 如何对两个 4 位数字进行乘法,将它们视为 C++ 中的多项式
- 在手臂氖中高效计算两个不同的数字
- 如何在 c++ 中添加两个大的双精度数字
- 我应该如何使用remove_if删除两个数字范围内的元素
- C++显示两个区间之间的数字的程序检查一个数字是否可以表示为两个素数的总和
- 是否有任何内置函数可以检查给定的两个数字在给定整数数组中的顺序是否相同?
- 如何在两个不同大小的向量中找到公共数字
- 如何使用C++中不是文字的变量在数字中显示单引号和两个引号?假设 6'2" 英尺