programing

부동 소수점 숫자에 부호있는 0이있는 이유는 무엇입니까?

nasanasas 2020. 10. 21. 08:10
반응형

부동 소수점 숫자에 부호있는 0이있는 이유는 무엇입니까?


복식은 왜 -0뿐만 아니라 +0? 배경과 의미는 무엇입니까?


-0(일반적으로) 0*******로 처리됩니다 . 때 발생할 수 있습니다 부정적인 부동 소수점 숫자가 너무 가까이 0으로 고려 될 수 있다는 점이다 0(명확하게하기 위해, 내가 말하는 겁니다 언더 플로 , 다음과 같은 계산의 결과로 해석된다 정확하게 ±0 , 정말 작은하지 번호). 예 :

System.out.println(-1 / Float.POSITIVE_INFINITY);
-0.0

양수로 같은 경우를 고려하면 우리는 좋은 오래된 것을 받게 될 것입니다 0.

System.out.println(1 / Float.POSITIVE_INFINITY);
0.0

******* 다음 -0.0은 사용할 때와 다른 결과 가 나오는 경우입니다 0.0.

System.out.println(1 / 0.0);
System.out.println(1 / -0.0);
무한대
-무한대

이것은 우리가 함수를 고려한다면 의미가 있습니다 1 / x. 으로 x접근 0으로부터 +- 측, 우리는 가야 양의 무한대를하지만, 그것은에서 접근로 -- 측, 우리는 가야 음의 무한대. 함수의 그래프는이를 명확히해야합니다.

( 출처 )

수학 용어 :

여기에 이미지 설명 입력

여기에 이미지 설명 입력

이것은 계산적 의미에서 0사이의 중요한 차이점을 보여줍니다 -0.


다음은 관련 리소스 중 일부가 이미 제공되었습니다. 완전성을 위해 포함했습니다.


Wikipedia에서

부호있는 0은 연관된 부호가있는 0입니다. 일반 산술에서 −0 = +0 = 0. 컴퓨팅에서 일반적으로 '+0' 으로 표시되는 일부 숫자 표현에서 두 개의 0존재한다는 개념이 존재하며 , 각각 음의 0양의 0을−0 나타냅니다 ( source ).+0

이것은 정수 에 대한 부호와 크기 및 1의 보수 부호있는 숫자 표현 과 대부분의 부동 소수점 숫자 표현에서 발생합니다. 숫자 0은 일반적으로 +0으로 인코딩되지만 +0 또는 -0으로 표시 될 수 있습니다.

에 따르면 IEEE 754 standard음의 0과 양의 0은 C 및 Java의 == 연산자와 같은 일반적인 (숫자) 비교 연산자와 동일하게 비교 되어야합니다 . ( 소스 ).

0에 가까운 음의 부동 소수점 숫자 인 결과를 생성 하는 부동 소수점 연산있지만 (계산시) 표현할없는 경우 "-0.0"이 생성됩니다. 예를 들어- .5.0 / Float.POSITIVE_INFINITY -> -0.0

-0.0, 및 에서이 구별 +0.0은 단순히 최종 결과 0을 제공하는 것보다 더 많은 정보를 제공합니다. 물론이 개념은 컴퓨터에서 사용되는 것과 같은 유한 표현 시스템에만 존재합니다. 수학에서는 0에 매우 가까워도 모든 숫자를 나타낼 수 있습니다.

−0+0원인 것을 연산 결과되는 언더 플로우 유사한 −00또는 +00동작 그 원인의 결과이다 오버플 . 수학적으로 불확실성 을 유발하는 연산 의 경우 결과는 NaN (예 : 0/0)입니다.

-0.0과 0.0의 차이점은 무엇입니까?

실제로 둘 다 0을 나타냅니다. 또한 (-0.0 == 0.0)은 true를 반환 합니다 . 그렇지만:

1) 1/-0.0생산 -Infinity의 동안은 1/0.0생산 무한대 .

2) 3 * (+0)= +0+0/-3= -0 . 기호 규칙은 서명 된 영을 통해 곱셈이나 나눗셈을 수행 할 때 적용됩니다.

필수 읽기 " 모든 컴퓨터 과학자가 부동 소수점 산술에 대해 알아야 할 사항 "(댓글에서 제안).


모든 컴퓨터 과학자가 부동 소수점 산술에 대해 알아야 할 사항의 "부호있는 0"섹션을 참조하십시오.

Java float 및 double의 0은 진정한 0을 나타내는 것이 아닙니다. 또한 정확한 결과가 표현할 수없는 크기가 너무 작은 계산의 결과로도 사용됩니다. 많은 상황에서 음수의 언더 플로와 양수의 언더 플로에는 큰 차이가 있습니다. 예를 들어, x크기가 매우 작은 1/x양수이면 양의 무한대 1/(-x)여야 하고 음의 무한대 여야합니다. 부호있는 0은 언더 플로 결과의 부호를 유지합니다.


부동 소수점에서 부호있는 0의 유용성에 대한 표준 참조는 Kahan의 논문 " Branch Cuts for Complex Elementary Functions, 또는 Much Ado About Nothing 's Sign Bit "(및 주제에 대한 그의 일부 강연)입니다.

짧은 버전은 합리적으로 일반적인 엔지니어링 응용 프로그램에서 숫자 방법에서 올바른 솔루션을 얻으려면 부호있는 0으로 보존되는 부호 정보가 필요하다는 것입니다. 0의 부호는 대부분의 실제 연산에서 거의 의미가 없지만 복잡한 값의 함수를 고려하거나 등각 매핑을 사용하면 0의 부호가 갑자기 매우 중요해질 수 있습니다.

또한 원래 (1985) IEEE-754위원회 가 부동 소수점 연산을위한 투영 모드를 지원하는 것을 고려하고 거부 했다는 점도 주목할 가치가 있습니다.이 모드에서는 부호없는 무한대 하나만있을 것입니다 (+/- 0은 이러한 모드에서 의미 상 동일합니다. 따라서 여전히 두 개의 인코딩이 있어도 하나의 0 만있을 것입니다.)

참고 URL : https://stackoverflow.com/questions/13544342/why-do-floating-point-numbers-have-signed-zeros

반응형