我的目標是在平方根爲負的情況下打印***
。但我不能想辦法來改變默認nan
文本***
C++負平方根
for(int i=x1;i<=x2;i++){
double y = sqrt(pow(i,2)+3*i-500);
if(y = ?){
outFile << "***";
}
所以,我應該怎麼寫if語句,使這可能嗎?或者,也許有另一種方法來檢查是否nan是打印*
我的目標是在平方根爲負的情況下打印***
。但我不能想辦法來改變默認nan
文本***
C++負平方根
for(int i=x1;i<=x2;i++){
double y = sqrt(pow(i,2)+3*i-500);
if(y = ?){
outFile << "***";
}
所以,我應該怎麼寫if語句,使這可能嗎?或者,也許有另一種方法來檢查是否nan是打印*
如何檢查負平方根函數的負輸入?
for (int i = x1; i <= x2; ++i)
{
double x = pow(i, 2) + 3*i - 500;
if (x < 0)
{
outFile << "***";
}
else
{
outFile << sqrt(x);
}
}
這看起來很可靠,謝謝:) – RnD 2012-01-29 12:25:02
nan數不等於任何東西,甚至對自己。
你可以簡單的測試,看看是否if(y != y)
。
是的,它工作:)謝謝 – RnD 2012-01-29 12:14:42
@RnD:這不是100%可靠,檢查Alf的鏈接重複的答案更多細節。 – 2012-01-29 12:18:10
在C++中測試NaN是tricky。只要使用if
聲明來避免評估sqrt
,如果它的參數是否定的。
我的目標是打印*如果平方根爲負。但我想不出一種方法來改變默認南文本*
平方根從不是負面的。但它可能很複雜。見https://en.wikipedia.org/wiki/Complex_number
的想法是將一組數字擴大到所謂複平面,其中包含一個特殊的數字我對於其定義I²= -1。這使我們能夠概括平方根:
的sqrt(AB)= SQRT(A)的sqrt(B)
因此,我們可以打破的sqrt(-A)爲的sqrt(-1)的sqrt(一)= 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;
}
}
的可能重複的[檢查如果一個雙(或浮動)爲NaN在C++](HTTP://計算器.com/questions/570669/checking-if-a-double-or-float-is-nan-in-c) – 2012-01-29 12:13:24
負平方根不存在。 – fredoverflow 2012-01-29 12:14:24
不要讓我變得複雜@fred – 2012-01-29 12:16:54