Negative Zero

Originally published by Howdy Pierce on November 17th 2017 6,483 reads
안녕하세요 피어스커 정오 프로필 사진

@howdypierceHowdy 찌르기

회장이며 설립자

facebook 사회적 아이콘Twitter 사회적 아이콘

내 아내면 다음과 같은 이야기를 모든 시간을 그녀를 확인하고 싶어하는 점에 나가학교:중 하나가 내 딸이었다에 두 번째 학년,그녀의 수학 선생님께서 말씀하시기를 클래스는 어떤 숫자를 구분하여 제로 하나였다. 나는 결과가 정의되지 않아야한다고 주장하면서 교사에게 감동적인 이메일을 뿌렸다. 아마도 이것은 내가 때때로 주변에 있기가 어렵다는 증거 일 것입니다.

농담이 나에게 있을지도 모른다는 것이 밝혀졌습니다-2 학년 교사의 대답을지지하는 것은 여전히 어렵지만. 나는 최근에 많은 것을 나에 대해 알고하지 않았다는 부동 소수점 연산:

  • 가 가치에 대한 부정적인 제로,별도의 일정(positive?)제로. 이 두 개의 0 은 서로 같도록 정의되어 있지만 별개의 값입니다.
  • x÷0.0,x≠±0 의 경우.0 은 오류가 아닙니다. 대신 결과는 일반적인 기호 규칙을 따르는 양의 무한대 또는 음의 무한대입니다.
  • ±0.0÷±0.0 의 경우는 오류입니다(특히”숫자가 아님”또는 NaN).
  • -0.0 + -0.0 = -0.0, -0.0 + 0.0 = 0.0, 고 -0.0×0.0=-0.0

이러한 규칙에서 줄기 IEEE754″표준에 대한 부동 소수점 연산하는”표준화된 부동 소수점을 표현에 걸쳐 플랫폼입니다. 표준의 가장 최신 버전은 2008 년에 완료되었지만 원래 버전은 1985 년에 발행되었으므로이 동작은 새로운 것이 아닙니다. 위의 규칙은 내 Mac 의 C(gcc)와 Swift 모두에서 사실이며 iPhone 의 Swift 에서도 마찬가지입니다. Mac 의 Python 은 수레에 대해 음의 0 을 지원하지만 임의의 부호의 0 으로 나누려고 할 때 예외를 던집니다.

의 몇 가지 놀라운 corollaries 이러한 규칙:

  • 기 때문에 0.0-0.0 해 비교 동등한 것으로,테스트(x<0.0)모든 음수에 대해 true 를 반환하지 않습니다-음수 0 에 대해 실패합니다. 따라서 0 값의 부호를 결정하려면 플랫폼의 내장 부호 함수(예:Double)를 사용해야합니다.스위프트에 로그인하십시오. 또는 double 의 원시 표현을 비트 조작 할 수 있다고 생각합니다.이 표현은 매우 C 프로그래머의 대답입니다.
  • a=b÷c 인 경우 반드시 b=a×c 를 따르는 것은 아니며,이는 c 가 어느 부호의 0 인 경우에도 실패하기 때문입니다.

나는 숫자 이론가가 아니지만 위의 개념이 놀랍다.

하나의 즉각적인 문제: 무한대는 0 또는 3.25 또는 π 와 같은 숫자가 아닙니다. 오히려 무한은 개념입니다. 합리적인 숫자가 셀 수 없을 정도로 무한하다는 것은 사실이지만 무한대는 합리적인 숫자 집합의 구성원이 아닙니다.

또한 숫자 이론의 관점에서 0 으로 나누는 것은 무의미합니다. 분열이 무엇을 의미하는지에 대해 정확하게 알게되면 이유를 이해할 수 있습니다. 기술적으로”나눗셈”은”숫자의 역으로 곱셈”이며,여기서 역은 a×a^-1=1 을 만족시킵니다. 0 은 단순히 곱셈 역수가없는 실제 숫자 집합의 유일한 숫자입니다. 그리고이 역이 존재하지 않기 때문에,우리는 그것을 곱하여 돌아 다닐 수 없습니다.

그러나 분명히 부동 소수점 숫자를 설계 한 사람들은이 모든 것을 알고있었습니다. 그래서 설명 된 동작이 IEEE 표준에 기록 된 이유에 대해 궁금해했습니다.시작하려면 부동 소수점 수학이 해결하려고하는 문제를 고려해 보겠습니다. 실제 숫자는 uncountly 무한,아직 우리는 유한 컴퓨터 메모리의 범위 내에서이 전체 집합을 표현 하고자. 64 비트 두 배기 2^64 가능한 기호,그리고 디자이너의 IEEE 표준려 했는지도 이러한 기호를 설정의 실수에서는 모두 유용한 실제 응용 프로그램과 또한 경제적 실현 가능한의 제약을 부여 80 년대 초,실리콘입니다. 기본 요구 사항을 감안할 때 분명히 근사치가 사용 될 예정이었습니다.

추론에 대한 부정적인 영 표시를 날짜를 1987 지 윌리엄에 의해 오므라이스,버클리 교수는”으로 간주되는 아버지의 부동 소수점”누가 이 나중에 미국에 대한 그의 작품에서 제도 IEEE754. 음의 0 의 존재는 0 으로 나눌 수있는 능력에 밀접하게 묶여 있음이 밝혀졌습니다.0 으로 나누는 것이 허용되지 않는 일반적인 이유를 논의하여 시작하겠습니다. 0 으로 나누는 순진한 접근법은

즉,x 가 작아지면 1/x 의 결과가 커진다는 관찰입니다. 그러나 이것은 x 가 긍정적 인 측면에서 0 에 접근 할 때만 사실입니다(위의 작은 더하기 기호가있는 이유입니다). 부정적인 측면에서 동일한 사고 실험을 실행:

그 결과,일반 제한의 1/x x0 가 정의되지 않 있기 때문에,불연속(무 Kahan 전화 틈새)함수에서 1/x.

그러나,도입하여 서명된 제로,항과 IEEE 위원회 일할 수 있는 주위에 어려움이 있다. 직관적으로,0 의 부호는 한계가 접근하고있는 방향을 나타 내기 위해 취해집니다. Kahan 이 1987 년 논문에서 언급 한 바와 같이:

보다는 오히려 생각+0-0 한 숫자값을 생각,그들의 등록금으로 보조하는 변수 중 하나를 전달하는 비트의 정보(또는 잘못된 정보)에 대해 모든 수치변수는 0 값으로 사용합니다. 일반적으로이 정보는 관련이 없습니다.3+x 의 값은 x:=+0 보다 x:=-0…. 그러나 몇 가지 특별한 산술 연산은 0 의 부호에 의해 영향을받습니다(예:1/(+0)=+∞하지만 1/(-0)=–∞).

내과 평화의 개념을 채택하여 합리화에 의해 제안된 내의 파트너 마이크 Perkins:2^64 로 사용할 수 있는 기호는 명확하게 부적절한 대표의 전체 세트의 숫자입니다. 그래서 IEEE 디자이너들은 특별한 의미를 위해 그 상징들 중 몇 가지를 제쳐 놓았습니다. 이러한 의미에서,∞의미가 없습니다”무한대”—대신에,이 의미는”실제보다 더 큰 숫자를 우리는 그렇지 않으면을 대표에서 우리의 부동 소수점 기호를 설정합니다.”따라서+0 의미가 없습니다”영”이지만,오히려”진정한보다 큰 숫자를 참 0 하지만 작은 어떤 것보다 긍정적인 수 있습니다.”

또한,연구하는 동안,이 문제가 발견되는 조항을 사랑하지 않는 아이디어의 부정적인 영:

명 zero—만,서명된 제로에 통증이 있었다 엉덩이를 우리가 제거할 수 있는 우리가 사용하면 투영 모니다. 이 있다면 그냥 하나는 무한대이고 하나는 영을 잘 할 수 있었다;그런 다음 당신은 걱정하지 않은 기호로 당신은 걱정하지 않은 등록의 무한대입니다. 그러나는 경우,다른 한편으로는,당신이 주장에 대한 것이 무엇으로 간주 작은 두 가지의 무한대,그때 당신은 끝날 것으로 두 개의 서명합니다. 정말로 그 주위에 방법이 없었고 당신은 그것에 갇혀있었습니다.”(2005 년에 실시 된 Kahan 의 인터뷰에서.)

나는 특정하지 않는 경우 블로그 게시물을 작성 십년 나중에게 난간에 대하여는 가난한 두 번째 학년 교사이다. 그녀의 부분 내 딸,이제 고등학교에서 그냥 눈을 때 나는에 대해 이야기를 시작한 부문에 의해 제로에서는 저녁 식사. 그래서 어쩌면”주변에 있기가 어렵다”는 것이 유전적인 것일 수도 있습니다.

Kahan,W.,”복잡한 초등 함수에 대한 분기 컷,또는 Nothing’S Sign Bit 에 대한 많은 법석”,수치 분석의 최첨단,(Eds. Iserles and Powell),Clarendon Press,Oxford,1987,여기에서 구할 수 있습니다.

Tags

Join Hacker Noon

Create your free 사용자 정의 독서 경험의 잠금을 해제하는 계정.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다