1. # INF00, -1. # IND00 및 -1. # IND는 무엇을 의미합니까?
수레를 사용하는 일부 C 코드를 엉망으로 만들고 화면에 수레를 인쇄하려고 할 때 1. # INF00, -1. # IND00 및 -1. # IND가 표시됩니다. 그 값은 무엇을 의미합니까?
나는 1. # INF00은 양의 무한대를 의미한다고 믿지만 -1. # IND00과 -1. # IND는 어떻습니까? 나는 또한 때때로이 값을 보았습니다. 1. $ NaN은 숫자가 아닙니다. 그러나 그 이상한 값의 원인은 무엇이며 디버깅에 어떻게 도움이 될 수 있습니까?
나는 부동 소수점 숫자에 IEEE 754 표현을 사용한다고 생각하는 MinGW 를 사용하고 있습니다.
누군가가 모든 잘못된 값과 그 의미를 나열 할 수 있습니까?
이 페이지는 다음 질문에 답합니다.
- 내 프로그램은 1. # IND 또는 1. # INF (Windows) 또는 nan 또는 inf (Linux)를 방금 인쇄했습니다. 어떻게 된 거예요?
- 숫자가 실제로 숫자이고 NaN 또는 무한대가 아닌지 어떻게 알 수 있습니까?
- NaN 및 무한대의 종류에 대한 자세한 내용을 런타임에 어떻게 찾을 수 있습니까?
- 이것이 어떻게 작동하는지 보여주는 샘플 코드가 있습니까?
- 자세한 내용은 어디에서 확인할 수 있습니까?
이러한 질문은 부동 소수점 예외와 관련이 있습니다. 숫자를 예상하는 이상한 비 숫자 출력이 나오면 부동 소수점 산술의 유한 한계를 초과했거나 정의되지 않은 결과를 요청한 것입니다. 단순하게 유지하기 위해 이중 부동 소수점 유형으로 작업 할 것입니다. 유사한 설명이 float 유형에 적용됩니다.
디버깅 1. # IND, 1. # INF, nan 및 inf
작업이 double로 저장 될 수있는 것보다 더 큰 양수를 생성하는 경우 작업은 Windows에서는 1. # INF를, Linux에서는 inf를 반환합니다. 마찬가지로 결과가 double로 저장하기에 너무 큰 음수가 될 경우 코드는 -1. # INF 또는 -inf를 반환합니다. 양수를 0으로 나누면 양의 무한대가 생성되고 음수를 0으로 나누면 음의 무한대가 생성됩니다. 이 페이지 끝에있는 예제 코드는 무한을 생성하는 몇 가지 작업을 보여줍니다.
음수의 제곱근을 취하는 것과 같은 일부 연산은 수학적 의미가 없습니다. (예,이 연산은 복소수의 맥락에서 의미가 있지만 double은 실수를 나타내므로 결과를 나타내는 double이 없습니다.) 음수의 로그도 마찬가지입니다. sqrt (-1.0) 및 log (-1.0) 모두 "숫자가 아님"인 "숫자"의 일반 용어 인 NaN을 반환합니다. Windows는 NaN을 -1. # IND ( "결정되지 않음"의 경우 "IND")로 표시하고 Linux는 nan을 표시합니다. NaN을 반환하는 다른 연산에는 0/0, 0 * ∞ 및 ∞ / ∞이 있습니다. 예제는 아래 샘플 코드를 참조하십시오.
간단히 말해서 1. # INF 또는 inf를 얻으면 오버플로 또는 0으로 나누기를 찾습니다. 1. # IND 또는 nan을 받으면 불법 작업을 찾으십시오. 아마도 당신은 단순히 버그가있을 수 있습니다. 더 미묘하고 계산하기 어려운 항목이있는 경우 오버플로, 언더 플로 및 정밀도 손실 방지를 참조하세요. 이 기사는 직접 계산할 경우 중간 단계가 오버플로되는 결과를 계산하는 방법을 제공합니다.
.NET 환경의 사용자에게는 다음이 숫자가 아닌 항목을 필터링하는 편리한 방법이 될 수 있습니다 (이 예제는 VB.NET에 있지만 C #에서도 비슷할 것입니다).
If Double.IsNaN(MyVariableName) Then
MyVariableName = 0 ' Or whatever you want to do here to "correct" the situation
End If
NaN 값이있는 변수를 사용하려고하면 다음 오류가 발생합니다.
Decimal에 비해 값이 너무 크거나 너무 작습니다.
-1.#IND00
과 의 차이점에 대해 궁금한 사람 -1.#IND
을 위해 (질문이 구체적으로 질문했지만 답변이 없음) :
-1.#IND00
이것은 특히 0이 아닌 숫자를 0으로 나눈 것을 의미합니다. 예 : 3.14 / 0
( source )
-1.#IND
(의 동의어 NaN
)
이 방법 네 가지 (참조 중 하나 위키 에서 소스 ) :
1) sqrt
또는 log
음수
2) 두 변수가 모두 0 또는 무한대 인 연산, 예 : 0 / 0
3) 적어도 하나의 변수가 이미있는 작업 NaN
, 예 :NaN * 5
4) 범위를 벗어남, 예 : arcsin(2)
"그들은 무엇입니까"라는 질문에 이미 위에 답변되어 있습니다.
그러나 디버깅 (두 번째 질문)과 특수 입력 값을 확인하려는 라이브러리를 개발할 때 Windows C ++에서 유용한 다음 함수를 찾을 수 있습니다.
_isnan (), _isfinite () 및 _fpclass ()
Linux / Unix에서는 isnan (), isfinite (), isnormal (), isinf (), fpclassify ()가 유용합니다 (컴파일러 플래그 -lm을 사용하여 libm과 링크해야 할 수도 있음).
참고 URL : https://stackoverflow.com/questions/347920/what-do-1-inf00-1-ind00-and-1-ind-mean
'Nice programing' 카테고리의 다른 글
matplotlib 서브 플롯의 행 및 열 헤더 (0) | 2020.11.28 |
---|---|
부동 소수점 수 구문 분석 : Catch All 알고리즘이 있습니까? (0) | 2020.11.28 |
JUnit 메시지에 성공 또는 실패 조건이 명시되어야합니까? (0) | 2020.11.28 |
프로토 타입과 클로저가있는 객체 지향 자바 스크립트 (0) | 2020.11.28 |
API 키 생성을위한 최상의 접근 방식 (0) | 2020.11.28 |