如果平方根为负,我的目标是打印***
。但我想不出将默认nan
文字更改为***
for(int i=x1;i<=x2;i++){
double y = sqrt(pow(i,2)+3*i-500);
if(y = ?){
outFile << "***";
}
那么,我应该在if语句中写什么才能使它成为可能?或者也许有另一种方法来检查y是否为nan然后打印 *
答案 0 :(得分:8)
如何检查负平面输入到平方根函数?
for (int i = x1; i <= x2; ++i)
{
double x = pow(i, 2) + 3*i - 500;
if (x < 0)
{
outFile << "***";
}
else
{
outFile << sqrt(x);
}
}
答案 1 :(得分:3)
在C ++中测试NaN是tricky。只需使用if
语句即可避免评估sqrt
其参数是否为负数。
答案 2 :(得分:2)
一个纳数不等于任何东西,即使对自己也是如此
您可以进行简单的测试,看看是否if( y != y )
。
答案 3 :(得分:0)
如果平方根为负,我的目标是打印 *。但我想不出将默认的nan文本更改为*
的方法
平方根永远不会消极。但它可能很复杂。见https://en.wikipedia.org/wiki/Complex_number
我们的想法是将数字集扩展到所谓的复平面,其中包含一个特殊数字 i ,其定义为i²= -1 即可。这允许我们概括平方根:
sqrt(a b)= 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;
}
}