面向初学者的 C++ 中的 nan
nan in c++ for beginner
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int main ()
{
float xstart = -2, xfinal = 2, h = 0.5;
float t, y;
cout << "X start = -2" << endl;
cout << "X final = 2" << endl;
cout << "step = 0.5" << endl << endl;
for ( float x = xstart; x <= xfinal; x+= h)
{
t= sqrt(pow(sin(x),2)) / sqrt(x - 4);
y= sqrt(2 * t + x);
cout << x << " | " << t << " | " << y << endl;
}
cout << endl;
}
这会将 t 和 y 变量输出为 nan。我不知道如何修复它。该代码只是问题的示例,除了修复 nans 之外无需执行任何其他操作。
只要您继续在 sqrt 函数中使用负数,它就无法修复。 (提示:x - 4 总是负数或零)
t= sqrt(pow(sin(x),2)) / sqrt(x - 4);
在C++中,负数的平方根定义为NAN,"Not a Number"。由于变量 x
在 [-2, 2]
范围内迭代,你永远不会让它不是 NAN,这意味着使用它的所有计算都将到达 NAN。
如果您希望 sqrt 到 return 复数,则需要使用 std::complex
及其各种数学函数。
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int main ()
{
float xstart = -2, xfinal = 2, h = 0.5;
float t, y;
cout << "X start = -2" << endl;
cout << "X final = 2" << endl;
cout << "step = 0.5" << endl << endl;
for ( float x = xstart; x <= xfinal; x+= h)
{
t= sqrt(pow(sin(x),2)) / sqrt(x - 4);
y= sqrt(2 * t + x);
cout << x << " | " << t << " | " << y << endl;
}
cout << endl;
}
这会将 t 和 y 变量输出为 nan。我不知道如何修复它。该代码只是问题的示例,除了修复 nans 之外无需执行任何其他操作。
只要您继续在 sqrt 函数中使用负数,它就无法修复。 (提示:x - 4 总是负数或零)
t= sqrt(pow(sin(x),2)) / sqrt(x - 4);
在C++中,负数的平方根定义为NAN,"Not a Number"。由于变量 x
在 [-2, 2]
范围内迭代,你永远不会让它不是 NAN,这意味着使用它的所有计算都将到达 NAN。
如果您希望 sqrt 到 return 复数,则需要使用 std::complex
及其各种数学函数。