플로팅 포인트 오류 -1.#J는 무엇을 의미합니까?
-
20-08-2019 - |
문제
최근에, 때때로 (드물게) 응용 프로그램에서 데이터를 내보낼 때 내보내기 로그에는 "-1.#j"모양의 플로트 값이 포함되어 있습니다. 나는 그것을 재현 할 수 없었기 때문에 이진에서 플로트가 어떻게 보이는지 또는 Visual Studio가 어떻게 표시되는지 모릅니다.
나는 printf의 소스 코드를 보려고 시도했지만 아무것도 찾지 못했습니다 (100%는 올바른 버전을 보았을 것입니다 ...).
인터넷 검색을 시도했지만 Google은 모든 #을 버립니다. 플로트 오류 목록을 찾을 수 없습니다.
해결책
음의 무한대 또는 NAN (숫자가 아님) 일 수 있습니다. 필드의 서식으로 인해 printf는 그것들을 구별하지 않습니다.
Visual Studio 2008에서 다음 코드를 시도했습니다.
double a = 0.0;
printf("%.3g\n", 1.0 / a); // +inf
printf("%.3g\n", -1.0 / a); // -inf
printf("%.3g\n", a / a); // NaN
다음 출력이 발생합니다.
1.#J
-1.#J
-1.#J
.3 형식 지정자를 제거하면 다음과 같이 표시됩니다.
1.#INF
-1.#INF
-1.#IND
따라서 0/0이 NAN을 제공하고 -1/0은 음의 무한대를 제공합니다 (NAN, -INF 및 +Inf는 제대로 기억하면 유일한 "잘못된"부동 소수점 번호입니다).
제휴하지 않습니다 StackOverflow