2012-01-29 2 views
1

내 목표는 제곱근이 음수이면 ***을 인쇄하는 것입니다. 하지만 나는 문 경우 가능하게하는 무엇 작성해야, *** 그래서C++ 음수 제곱근

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

기본적 nan 텍스트를 변경하는 방법을 생각할 수 없다? 또는 y가 Nn인지 확인하는 다른 방법이있을 수 있습니다. *

+0

가능한 중복으로 프로그램을 변경할 수 있습니다 SQRT (HTTP [확인 더블 (또는 float)입니다 유모 C++의 경우] : // 유래 .com/questions/570669/check-if-a-double-or-float-is-nan-in-c) –

+1

음의 제곱근은 없습니다. – fredoverflow

+4

나에게 복잡한 것을 얻지 마라. –

답변

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

2

나노 번호는 심지어 그 자체로도 동일하지 않습니다.
if(y != y)인지 간단하게 테스트 할 수 있습니다.

+0

그래, 성공 했어. 고마워. – RnD

+0

@RnD : 이것은 100 % 신뢰도가 아니며, 자세한 내용은 링크 된 복사본에서 Alf의 대답을 확인하라. –

3

C++에서의 NaN 테스트는 tricky입니다. 인수가 음수이면 sqrt을 평가하지 않으려면 if 문을 사용하십시오.

0

내 목표는 제곱근이 음수 인 경우 * 을 인쇄하는 것입니다. 하지만 기본 나노 텍스트를 변경하는 방법을 생각할 수 없습니다.

제곱근은 결코 음수가 아닙니다. 그러나 그것은 복잡 할 수 있습니다. 아이디어는 I² = -1을 정의 내가있는 특별한 번호 을 포함하는 소위 복소 평면으로 숫자의 집합을 확장하는 것입니다 https://en.wikipedia.org/wiki/Complex_number

참조하십시오. 이것은 우리가 제곱근 일반화 할 수 있습니다 :

SQRT을 (AB)을 (SQRT (-1) SQRT에 SQRT (가) SQRT (b)에

그래서 우리는 분해 할 수 SQRT (-a)를 = A) = I (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; 
    } 
}