programing

1.#의 기능INF00, -1.#IND00 및 -1.#IND는요?

firstcheck 2022. 7. 28. 22:20
반응형

1.#의 기능INF00, -1.#IND00 및 -1.#IND는요?

플로트로 C코드를 만지작거리고 있는데 1이 나오네요INF00, -1.#IND00 및 -1.#화면에 플로트를 인쇄하려고 하면 IND가 됩니다.그 값들은 무엇을 의미합니까?

나는 그것을 믿는다.#INF00은 양의 무한대를 의미하지만 -1.#은 어떨까요?IND00 및 -1.#IND? 저도 가끔 1이라는 값을 봤어요.번호가 아닌 $NaN. 그런데 이러한 이상한 값의 원인은 무엇이며 디버깅에 어떻게 도움이 됩니까?

부동소수점 번호에 IEEE 754 표현을 사용하는 MinGW를 사용하고 있습니다.

그 모든 무효값과 그 의미를 나열할 수 있는 사람이 있을까요?

C++의 IEEE 부동소수점 예외:

이 페이지에서는 다음 질문에 대한 답변을 제공합니다.

  • 내 프로그램이 방금 1.#을 인쇄했다.IND 또는 1#INF(Windows) 또는 nan 또는 inf(Linux).무슨 일입니까?
  • 숫자가 NaN이나 무한대가 아닌 진짜 숫자인지 어떻게 알 수 있나요?
  • 런타임에 NaN의 종류와 인피니트에 대한 자세한 내용은 어떻게 알 수 있습니까?
  • 어떻게 작동하는지 보여줄 샘플 코드가 있나요?
  • 자세한 내용은 어디서 알 수 있습니까?

이러한 질문은 부동 소수점 예외와 관련이 있습니다.숫자를 예상하는 이상한 비숫자 출력이 있을 경우 부동 소수점 산술의 유한 한계를 초과했거나 정의되지 않은 결과를 요구했을 수 있습니다.간단하게 하기 위해서, 더블 부동 소수점 타입으로 작업을 계속합니다.플로트 타입에도 같은 코멘트가 적용됩니다.

디버깅 1.#IND, 1.#INF, nan 및 inf

작업에서 2배 이상 큰 양의 숫자가 생성될 경우 1.#이 반환됩니다.Windows에서는 INF, Linux에서는 INF.마찬가지로 코드는 -1.#을 반환합니다.INF 또는 -inf는 결과가 음수이므로 이중으로 저장할 수 없습니다.양수를 0으로 나누면 양의 무한대가 생성되고 음수를 0으로 나누면 음의 무한대가 생성됩니다.이 페이지 끝에 있는 예제 코드는 무한대를 생성하는 몇 가지 연산을 보여줍니다.

음수의 제곱근을 구하는 것과 같이 수학적으로 의미가 없는 연산도 있습니다.(복소수에서는 이 연산은 의미가 있지만, 2배는 실수를 나타내므로 결과를 나타내는 2배는 없습니다.)음수의 로그도 마찬가지입니다.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이든 불법 조작을 찾아봐아마 당신은 단순히 벌레가 있는 것 같아요.더 미묘하고 계산하기 어려운 항목이 있는 경우 오버플로 방지, 언더플로 및 정밀도 손실을 참조하십시오.이 기사에서는 직접 계산할 경우 중간 단계가 오버플로하는 결과를 계산하는 방법을 설명합니다.

다른 점이 궁금하신 분들을 위해-1.#IND00그리고.-1.#IND(질문은 특별히 했지만 답변은 없습니다)

-1.#IND00

이는 특히 0이 아닌 숫자를 0으로 나눈 것을 의미합니다.3.14 / 0(소스)

-1.#IND (의 동의어)NaN)

이는 다음 4가지 중 하나를 의미합니다(wiki from source 참조).

1)sqrt또는log음수의

2) 두 변수가 모두 0 또는 무한인 경우의 연산(예:0 / 0

3) 하나 이상의 변수가 이미 존재하는 작업NaN,예.NaN * 5

4) 트리거 범위를 벗어납니다(예:arcsin(2)

"What's they's they"라는 질문은 이미 위에서 답변한 것입니다.

다만, 디버깅(두 번째 질문)에 관한 한, 및 특수한 입력치를 체크하는 라이브러리를 개발하는 경우는, Windows C++ 로 다음의 기능이 도움이 되는 경우가 있습니다.

_isfinite_isfinite_및 _fpclass()

Linux/Unix에서는 isan(), isfinite(), isormal(), isinf(), fpclassify()가 편리합니다(또한 컴파일러 플래그 -lm을 사용하여 libm과 링크해야 할 수도 있습니다).

에 있는 분들을 위해서.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 값을 가진 변수를 사용하려고 하면 다음 오류가 발생합니다.

값이 십진수에 비해 너무 크거나 너무 작습니다.

언급URL : https://stackoverflow.com/questions/347920/what-do-1-inf00-1-ind00-and-1-ind-mean

반응형