【发布时间】:2020-02-17 22:32:17
【问题描述】:
这是一个简单的 C++ 程序,它使用公式计算两个给定数字之间的固定数量值的公式。
在 for 循环中 k = 0 时似乎有一些问题。它正在返回一个垃圾值。
谁能告诉我为什么?
非常感谢任何帮助。提前致谢。
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main ()
{
int const POINTS = 21;
double const PI = 3.1416;
double min, max, increment, dataPoints[21];
cout << "Enter max value: ";
cin >> max;
cout << "Enter min value: ";
cin >> min;
increment = (max - min) / (POINTS - 1);
cout << setw (20) << "X-Value" << "|";
cout << setw (20) << "Y-Value" << endl;
double k;
int l;
for (k = min, l = 0; l < POINTS, k <= max; l++, k += increment)
{
dataPoints[l] = (PI / 16) * sin (6.036 * k) + (1 / 64) * PI * cos (24.44 * k);
cout << setw (20) << k << setw (20) << dataPoints[l] << endl;
}
}
输出:
Enter max value: 4
Enter min value: -4
X-Value| Y-Value
-4 0.164018
-3.6 -0.0507715
-3.2 -0.0881608
-2.8 0.182492
-2.4 -0.184497
-2 0.0931637
-1.6 0.0453027
-1.2 -0.16085
-0.8 0.195021
-0.4 -0.130529
-5.55112e-016 -6.57901e-016
0.4 0.130529
0.8 -0.195021
1.2 0.16085
1.6 -0.0453027
2 -0.0931637
2.4 0.184497
2.8 -0.182492
3.2 0.0881608
3.6 0.0507715
4 -0.164018
Process returned 0 (0x0) execution time : 3.634 s
Press any key to continue.
【问题讨论】:
-
发生这种情况是因为计算机以二进制数计数。这意味着小的加法和减法可能与预期值略有不同。如果你将它四舍五入或削减从 idk 后面的第五位开始的数字。你应该没事
-
[tangent]
l < POINTS, k <= max不像你想的那样工作。这些比较之一的结果被丢弃。你的意思可能是l < POINTS && k <= max -
[专业提示] 不要使用浮点类型作为循环索引。如果你想提高十分之四,那么你可以这样做
for (int index = start_value * 10, index < stop_value * 10; index += 4) { divide index by 10 here to get the decimal number } -
顺便说一句,
std::命名空间包含min和max名称,从技术上讲,在这种情况下使用它是一个 UB。你很幸运在使用命名空间时不包括<algorithm>(如果任何标题都没有,则没有定义)
标签: c++ for-loop garbage cmath