程序输出 "nan"
Programm Output "nan"
我正在尝试用无限级数计算圆周率。当我开始我的程序时,我期望得到一些错误的数字,但我得到的是输出 "nan".
有人知道为什么吗?
代码如下:
#include <iostream>
using namespace std;
int main()
{
long double pi;
float x;
int y = 3;
bool loop = true;
while(true)
{
x=1/y;
y+2;
if(loop == true)
{
pi -= x;
loop = false;
}
else if(loop == false)
{
pi += x;
loop = true;
}
cout<<pi<<" ";
}
return 0;
}
您的代码的行为未定义,因为当您读取它的值并对其添加或减去 x
或从中减去 x
时,pi 未被初始化。这就是 NaN 的原因:一些编译器在某些方面很有帮助——将未初始化的浮点变量设置为 NaN。
由于整数除法,x = 1 / y;
将 x
设置为 0。你想要 1.0 / y
吗?
y + 2;
是空操作。你想要 y += 2
吗?
注意需要将级数乘以4得到pi,而且这个级数收敛特别慢,需要300项才能保留两位小数。而你的 y
的起始值是错误的。不应该是1吗?
我正在尝试用无限级数计算圆周率。当我开始我的程序时,我期望得到一些错误的数字,但我得到的是输出 "nan".
有人知道为什么吗?
代码如下:
#include <iostream>
using namespace std;
int main()
{
long double pi;
float x;
int y = 3;
bool loop = true;
while(true)
{
x=1/y;
y+2;
if(loop == true)
{
pi -= x;
loop = false;
}
else if(loop == false)
{
pi += x;
loop = true;
}
cout<<pi<<" ";
}
return 0;
}
您的代码的行为未定义,因为当您读取它的值并对其添加或减去 x
或从中减去 x
时,pi 未被初始化。这就是 NaN 的原因:一些编译器在某些方面很有帮助——将未初始化的浮点变量设置为 NaN。
x = 1 / y;
将 x
设置为 0。你想要 1.0 / y
吗?
y + 2;
是空操作。你想要 y += 2
吗?
注意需要将级数乘以4得到pi,而且这个级数收敛特别慢,需要300项才能保留两位小数。而你的 y
的起始值是错误的。不应该是1吗?