2012-01-29 108 views
1

我的目標是在平方根爲負的情況下打印***。但我不能想辦法來改變默認nan文本***C++負平方根

for(int i=x1;i<=x2;i++){ 
    double y = sqrt(pow(i,2)+3*i-500); 
    if(y = ?){ 
     outFile << "***"; 
    } 

所以,我應該怎麼寫if語句,使這可能嗎?或者,也許有另一種方法來檢查是否nan是打印*

+0

的可能重複的[檢查如果一個雙(或浮動)爲NaN在C++](HTTP://計算器.com/questions/570669/checking-if-a-double-or-float-is-nan-in-c) – 2012-01-29 12:13:24

+1

負平方根不存在。 – fredoverflow 2012-01-29 12:14:24

+4

不要讓我變得複雜@fred – 2012-01-29 12:16:54

回答

8

如何檢查負平方根函數的負輸入

for (int i = x1; i <= x2; ++i) 
{ 
    double x = pow(i, 2) + 3*i - 500; 
    if (x < 0) 
    { 
     outFile << "***"; 
    } 
    else 
    { 
     outFile << sqrt(x); 
    } 
} 
+0

這看起來很可靠,謝謝:) – RnD 2012-01-29 12:25:02

2

nan數不等於任何東西,甚至對自己。
你可以簡單的測試,看看是否if(y != y)

+0

是的,它工作:)謝謝 – RnD 2012-01-29 12:14:42

+0

@RnD:這不是100%可靠,檢查Alf的鏈接重複的答案更多細節。 – 2012-01-29 12:18:10

3

在C++中測試NaN是tricky。只要使用if聲明來避免評估sqrt,如果它的參數是否定的。

0

我的目標是打印*如果平方根爲負。但我想不出一種方法來改變默認南文本*

平方根從不是負面的。但它可能很複雜。見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; 
    } 
}