2011-01-14 9 views
6

는 :.C++ SQRT -1을 반환 구체적인에서 # IND000000000000

임은 일부 수학 연산을 수행하고, 응용 프로그램이 널리 사용되는 두 배의 값을 얻기 위해 발생하기 때문에 충돌 유지 :. -1 #의 IND000000000000 "일부 "숫자는 sqrt되었습니다 ... 이것은 무엇입니까? 무기한? 무한? 너무 큽니다. 완벽한 스퀘어 루트가 아니십니까? 이 문제를 해결할 방법이 있습니까? 미리 감사드립니다. EDIT : double에이 값이 있는지 어떻게 확인할 수 있습니까? 내가 시도 : if (x == 0x-1. # IND000000000000) 및 기타 유사하지만 작동하지 않았다. 변수에이 값이 있는지 확인하는 것이 가능합니까?

+1

은 아마도 일부 숫자가 0보다 작습니까? 선생님, -1의 sqrt은 무엇입니까 – EnabrenTane

+4

-1의 제곱근은 i입니다. –

+5

분명히 EnabrenTane은 "IEEE 754 sqrt가 -1.0입니까?" –

답변

10

사실, 문자열 -1.#IND000000000000 함수에 의해 반환 된 값은 아니지만, 발생하지 않습니다 즉, 잘못된 수를 나타내는 QNaN, Quiet Not-a-Number 특수 IEEE-754 값의 일반적인 표현 중 하나입니다 예외 (활성화 된 경우 부동 소수점 예외를 발생시키는 SNaN, Signalling NaN도 있음). 이것의 일반적인 원인은 그것의 도메인 밖의 인수를 가진 함수를 호출하는 것입니다.

+1

하나의 가치 만이 아니라 많은 것이 있습니다. –

+0

예, 많은 특정 비트 레이아웃은 동일한 "NaN 값"을 나타냅니다. – mbaitoff

0

복잡한 유형을 사용하지 않으면 0보다 작은 값의 sqrt는 예외를 발생시키기위한 것입니다.

1

인수가 음수이면 전역 변수 errno를 값 EDOM으로 설정하여 도메인 오류가 발생합니다.

2

#IND000000000000은 잘못된 숫자 값을 나타냅니다. 이것은 불확정 유형을 나타내지 만 계산이 실패하지 않기 때문에 종종 QNaN (Quiet Not-A-Number) 값이라고합니다.

제곱근을 결정하려고 시도하는 예상치 못한 숫자는 음수 인 숫자이며 그 값은 정의되어 있지 않습니다. 자세한 내용은 Wikipedia을 참조하십시오.

해결하면 먼저 을 확인해야합니다. 여기서 문제가 발생합니다. 즉, 디버거를 사용하여 스스로 단계를 밟아 변수 값을 보거나 코드를 게시하여 동일한 작업을 수행 할 수 있어야합니다.

0

NaN (숫자가 아님)입니다. 그것은 네가 부정적인 인수로 sqrt를 호출했다는 것을 의미한다.

건배 & HTH.,

5

NaN을 (예를 들면, 당신이 "불확정"와 "무한대"등)이 (가 어떤 유한 한 수의 NaN이에 대한 허위 사실) x == x을 확인하여 검출 될 수있다.