为什么我的程序在for循环中k=0时返回垃圾值
Why is my program returning a garbage value when k == 0 in the for-loop?
这是一个简单的C++程序,它使用一个公式计算f(x(,该公式适用于2个给定数字之间的固定数量的值。
在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.
一个问题在于代码(1 / 64)
。。。因为你已经把这个表达式放在括号里了。因此,它是整数除法,因此,总是的值为零。
试试这个:
dataPoints[l] = (PI / 16) * sin (6.036 * k) + (1.0 / 64) * PI * cos (24.44 * k);
在for
循环中表达"测试"条件的方式也有问题——这里的逗号运算符实际上会忽略表达式的第一部分:
for (k = min, l = 0; l < POINTS, k <= max; l++, k += increment)
为了安全起见,当您想要测试两个条件时,请使用&&
运算符:
for (k = min, l = 0; l < POINTS && k <= max; l++, k += increment) {
最后,您的实际问题:
当for循环中k=0时,似乎出现了一些问题。是的返回一个垃圾值。
不,不是!您对k
变量(即每个循环中的k += increment
(执行的浮点运算并不精确:您认为0.4 + (-0.4)
实际上是'nearly' '0.4' - 'nearly' '0.4'
;因此,考虑到您使用的数字范围(以及之前循环中累积的"误差"(,您得到的值(我的系统给出-5.55112e-16
(是零的"合理近似值"。
请随时要求进一步澄清和/或解释。
由于增量为0.2时存在舍入误差,因此k值永远不会精确地为零——它会稍微偏离一点。看看每个计算机科学家都应该知道浮点
相关文章:
- 为什么我的程序在for循环中k=0时返回垃圾值
- 为什么C++程序在太大时返回代码而不是答案?
- 字符串函数在目标C++上运行时C++返回空
- getopt_long_only第二次调用时返回 -1
- 读取文件在第二次调用时返回INVALID_HANDLE
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- C++ find() 在存储为变量时返回不同的值
- 为什么 c++11 std::normal_distribution 在从函数调用时返回相同的模式?
- 为什么 getch 在按下函数或箭头键时返回三个值?
- fscanf 在尝试返回文本文件的第一行时返回 -1
- 使用 Google 基准测试时返回值会发生什么情况?
- FBX SDK 在预期 3 个顶点时返回 4 个顶点
- C++未使用的变量警告,即使我在函数结束时返回它
- 访问包含P的有效索引时返回空格的C++字符串
- wcslen() 在使用编译指示包时返回不正确的结果
- 按回车键时返回 cin 的值不为 0
- 为什么我的变量在我尚未将其设置为任何值时返回一个值?
- 编译器在传递 const 变量时返回错误:模板参数不是常量表达式
- Java 套接字读取在第二次读取时返回奇怪字符
- 我正在尝试创建一个布尔函数,该函数计算字符并在字符为"()*-+"时返回 true