我的目标是打印***
平方根是否为负。但我想不出一种将默认nan
文本更改为的方法***
for(int i=x1;i<=x2;i++){
double y = sqrt(pow(i,2)+3*i-500);
if(y = ?){
outFile << "***";
}
那么,我应该在 if 语句中写些什么才能使它成为可能呢?或者也许还有另一种方法来检查 y 是否为 nan 然后打印*
如何检查平方根函数的负输入?
for (int i = x1; i <= x2; ++i)
{
double x = pow(i, 2) + 3*i - 500;
if (x < 0)
{
outFile << "***";
}
else
{
outFile << sqrt(x);
}
}
在 C++ 中测试 NaN 很棘手。只需使用一个if
语句来避免评估sqrt
if 它的论点是否定的。
一个 nan 数不等于任何东西,甚至不等于它自己。
你可以简单测试看看是否if( y != y )
。
如果平方根为负,我的目标是打印*。但我想不出将默认 nan 文本更改为 * 的方法
平方根永远不会是负数。但这可能很复杂。见https://en.wikipedia.org/wiki/Complex_number
这个想法是将数字集扩展为所谓的复平面,其中包含一个特殊的数字i,其定义为i² = -1。这允许我们推广平方根:
sqrt(ab) = sqrt(a) sqrt(b)
所以我们可以把 sqrt(-a) 分解成sqrt(-1) sqrt(a) = i sqrt(a)
这使我们可以将您的程序更改为
for(int i=x1;i<=x2;i++){
double X = pow(i,2)+3*i-500;
double y = sqrt(abs(x));
if(X < 0){
outFile << y << "i";
} else {
outFile << y;
}
}