'etc'에 해당되는 글 22건

  1. 2019.03.28 programmer
  2. 2017.01.19 [수학] -1*-1=1인 이유는
  3. 2017.01.19 [수학] 1/0은 왜 안되나 1
  4. 2017.01.18 부동 소수점 설명
  5. 2017.01.18 부동 소수점의 이해
  6. 2016.09.09 particular, specific, certain
  7. 2015.05.11 폰트, BitstreamVeraSansMono
  8. 2014.02.24 받히다, 받치다, 바치다
  9. 2013.10.28 건전지 자가 교체 1
  10. 2013.10.28 태양계의 움직임

programmer

etc 2019. 3. 28. 09:06

'etc' 카테고리의 다른 글

[수학] -1*-1=1인 이유는  (0) 2017.01.19
[수학] 1/0은 왜 안되나  (1) 2017.01.19
부동 소수점 설명  (0) 2017.01.18
부동 소수점의 이해  (0) 2017.01.18
particular, specific, certain  (0) 2016.09.09
:

[수학] -1*-1=1인 이유는

etc 2017. 1. 19. 15:18


음수와 음수를 곱하면 양수가 된다는데, 그냥 그렇다고 외우기만 했을 뿐, 그 이유를 생각해 보지 못했다. 음수끼리 더하면 여전히 음수인데 왜 곱하면 양수가 될까? 생각해 보면, 곱이 양수가 되는 것은커녕 음수끼리 어떻게 곱할 수 있는지도 이해하기 어렵다. 음수와 음수의 곱은 도대체 무엇일까?

스탕달도 파스칼도 음수를 몰랐다

음수를 이해할 수 있는 쉬운 방법 가운데 하나는 아마도 금전적 이익을 양, 금전적 손실을 음으로 생각하는 방식일 것이다. 그런데 이 방식은 음수의 덧뺄셈을 설명하는 데는 좋지만, 곱셈이나 나눗셈을 다루는 데는 오히려 방해가 된다. 일례로, 소설 <적과 흑>으로 유명한 프랑스의 작가 스탕달(Stendhal, 1783-1842)은 자전적 소설에서, “1만 프랑의 빚과 5백 프랑의 빚을 곱하면 어떻게 5백만 프랑의 이익이 된다는 말인가?”라고 썼다. 음수와 음수의 곱이 양수인 것을 이해할 수 없다는 것이다. 당대의 지식인 가운데 한 명인 스탕달이 이 정도였으니, 음수에 음수를 곱해서 양수가 된다는 사실을 선뜻 받아들이지 못하는 사람들이 많았음을 짐작할 수 있다. 사실 무리수보다 음수가 더 늦게 발견됐으며, 음수의 연산을 보편적으로 받아들인 것이 무리수를 받아들인 것보다 나중인 것을 보면, 음수에 대한 거부감 내지는 공포감이 얼마나 심했는지 알 만하다. 희대의 천재로 손꼽히는 파스칼(Blaise Pascal, 1623-1662)조차 “놀랍게도, 아무것도 없는 상태에서 4개를 없애도 여전히 아무것도 없다는 사실을 이해하지 못하는 사람들이 있다”라고 자신의 책에 써놓을 정도였다.


양수와 음수의 모델 : 빚과 이익
‘인간은 생각하는 갈대’라고 말한, ‘파스칼의 원리’를 발견한, 세계에서 처음으로 계산기를 만든 그 파스칼이 말이다. 음수 곱하기 음수가 양수라는 것은 문헌 상으로는 7세기 인도의 수학자 브라흐마굽타(Brahmagupta, 598–668)가 처음 밝혔다. 그렇지만, -3이 2보다 작은데 어떻게 -3의 제곱이 2의 제곱보다 크냐는 반론이 1000년도 더 지난 18세기 유럽에서 버젓이 상식처럼 통용되기도 하였으니, 음수에 음수를 곱한 것이 양수라는 사실에 대한 저항이 만만치 않았음을 알 수 있다. 오늘날처럼 경제나 날씨 등에서 음수의 개념이 일상화된 사회에서는 이러한 저항이 훨씬 덜한 편이지만, 여전히 음수를 처음 배우는 사람들이나 배운지 오랜 사람들에게는 낯설게 느껴지는 것도 사실이다.

스탕달의 예에서처럼 음수와 양수는 “빚”과 “이익”이라는 모델이 있다. 양수를 이익으로 생각하고 음수를 빚으로 생각하면, 이 모델은 양수의 덧셈과 뺄셈을 모두 설명할 수 있기 때문에 매우 좋은 모델이라 할 수 있다. 예를 들어 양수를 더하는 것은 이익이 늘어나는 것이고, 음수를 더하는 것은 이익이 줄어드는 것으로 생각하는 것이다. (이익이 0보다 작으면 빚으로 해석한다.) 인간은 한번 성공한 방법을 상황이 달라지더라도 적용하려는 경향이 있어서, 양수와 음수에 대한 연산을 할 때면 으레 빚과 이익을 생각하기 마련이다. 따라서 음수를 곱해서 양수라는 것을 빚과 빚을 곱해서 이익이라는 모델로 이해하려 시도하는 것도 자연스러운 현상이다. 왜 이 모델이 곱셈을 다룰 때는 잘 작동하지 않는 것일까?

빚에 빚을 곱하지 말라

빚과 이익 모델을 써서 곱하기를 하려고 하면, 양수 곱하기 양수를 설명할 때부터 벌써 삐걱거리기 시작한다. 이 모델대로라면 ‘이익’에 ‘이익’을 곱하면 ‘이익’이라는 말인데 과연 그럴까? 100원짜리가 10개 있으면 1,000원(100 × 10 = 1,000)이므로 양수를 곱하면 양수라는 것은 얼핏 보면 그럴듯한 설명처럼 보인다. 그런데 잘 들여다보면 앞의 100의 단위는 ‘원’이지만, 뒤의 10은 단위가 ‘개수’임을 알 수 있다. 앞의 100원은 ‘이익’이라 불러도 괜찮지만, 뒤의 10개는 ‘이익’이라고 해석하기 곤란한 것이다. 따라서 빚에 빚을 곱하는 것은 고사하고, 이익에 이익을 곱한다는 것부터가 어불성설임을 알 수 있다.

빚과 이익모델 버릴까? 살릴까?

‘이익의 곱은 이익’이라는 말은 틀린 ‘해석’이지만, 빚과 이익 모델로도 일단 양수 곱하기 양수가 양수라는 것을 설명하는 데는 별 문제가 없다. 한편, 이 모델로 음수 곱하기 양수가 음수라는 것도 설명할 수 있다. 예를 들어, 천 원을 빚진 사람이 열 명이면, 전체 빚이 만원임을 안다. 식으로 쓰면 아래와 같이 나타낼 수 있다.



이와 같이 음수 곱하기 양수와 양수 곱하기 음수가 음수라는 것을 설명할 수 있기 때문에 (역시 ‘빚 곱하기 이익이 빚’이라는 얘기는 아니다) 곱셈일 때도 완전히 폐기처분하기에 아까운 모델이기는 하다. 그렇지만 이 모델은 ‘음수 곱하기 음수’를 잘 설명할 수 없다는 것이 결정적 약점이다. 무엇보다 사람수나 개수에는 음수가 없기 때문이다. 물론 이해해 볼 방법이 없는 것은 아닌데, 조금 뒤로 미루자.

음수에 음수를 곱하면 양수이다 : 1.규칙성



위의 곱셈표를 보자. 가로줄을 보면, 곱해지는 수를 하나씩 줄임에 따라 곱셈의 결과도 일정하게 변한다. 세로줄을 보면 곱하는 수를 하나씩 줄임에 따라 역시 일정하게, 첫 번째 세로줄은 2씩 줄고, 두 번째 줄은 1씩 줄고, 세 번째 줄은 0으로 변함이 없고, 네 번째 줄은 1씩 늘고, 다섯 번째 줄은 2씩 늘고 있다. 따라서 다음 가로줄을 만들면 아래와 같이 되어야 원래의 규칙이 유지된다.



이로부터 음수에 음수를 곱하면 양수가 되는 것이 매우 자연스럽다는 것을 알 수 있다. (원한다면두어 줄 더 계산해도 좋다.)

음수에 음수를 곱하면 양수이다 : 2.수직선

음수를 다루는 기본적인 방식 가운데 하나는 수에 방향성을 부여하는 것이다. 양수와 음수를 양의 방향과 음의 방향의 두 가지로 생각하면 모델링 하기에 편리하다. 우리가 잘 알고 있는 수직선()이 바로 그것이다. 수직선에서 3과 -3은 기준점이 되는 원점에서 같은 거리(양)만큼 떨어져 있지만 방향이 서로 반대여서 다른 수가 된다. 사실 수직선 모델이 나온 이후에야 비로소 파스칼처럼 음수의 존재 자체를 부정하는 경향이 사라졌다. 이 수직선 모델에서 2에 3을 곱하는 것은 2를 3번 더하는 것이므로, 수직선의 0에서 양의 방향으로 2칸씩 3번 이동한 결과로 생각할 수 있다.



같은 방식으로 2에 -3을 곱하는 것은 반대 방향으로 2칸씩 3번, 즉 -2만큼 움직이는 과정을 3번 반복한 것으로 생각할 수 있다. 즉, -2에 3을 곱하는 것과 마찬가지로 생각할 수 있다.



이제(-2)×(-3)을 생각해 보면 -2의 반대 방향으로 3번 움직이는 것에 해당하고, 이것은 2를 3번 더한 것과 같아지므로,(-2)×(-3) = 6이 된다.

음수에 음수를 곱하면 양수이다 : 3.빚과 이익 모델

빚과 이익 모델로도 음수의 곱을 설명할 수 있다. 양수만 더하고 빼던 것을, 음수도 더하고 빼는 것으로 확장하는 것이다. 음수를 더하는 것은 빚이 늘어난다, 이익이 줄어든다는 뜻으로 해석하고, 음수를 뺀다는 것은 빚이 줄어든다, 즉, 이익이 늘어난다는 뜻으로 해석하는 것이 합리적이다. 특히 a가 양수일 때,-a를 뺀다는 것은 a만큼의 빚(즉, -a)이 줄었다는 뜻이므로, a만큼의 이익이 늘어났다는 뜻이다. 즉,-(-a) = a인 것이다. 또한 빚과 이익 모델에서 a와 b가 양수일 때(-a) × b = -(a × b) = a × (-b)라는 것은 수긍할 수 있을 것이다. 음수의 곱셈이 기존의 셈법과 어울리려면 저 식이b가 음수일 때도 (혹은 0일 때도) 성립하는 것이 바람직할 것이다. 따라서 b가 음수일 때b = -c로 나타내면, c는 양수이고 (-a) × (-c) = a ×(-(-c)) = a × c여야만 한다.즉, 음수 곱하기 음수는 양수가 되는 것이 합리적이다.

음수에 음수를 곱하면 양수이다 : 4.수학적 증명

음수와 음수의 곱이 양수임을 여러가지로 ‘설명’했지만, 엄밀한 증명이라고 하기는 어렵다. 예를 들어 -와 -의 곱이 임을 위의 설명을 써서 보이기 힘든데, 번, 혹은 개 같은 것을 생각할 수 없기 때문이다. 엄밀한 증명을 위해서는 0이 덧셈의 항등원이라는 것과, 덧셈의 결합법칙, 덧셈과 곱셈 사이의 분배법칙을 이용해여 (-a) × (-b) = ab를 증명할 수 있다. 먼저 음수와 음수의 곱 가운데 가장 간단한 (-1) × (-1) = 1을 연습 삼아 풀어보자. 0 = 1 + (-1)임은 알고 있다. 양변에 -1을 곱하고 분배법칙을 적용하면, 아래와 같다.



1 × (-1) = -1이므로 위의 식은 0=-1+(-1)×(-1) 이 된다. 이제 양변에 1을 더하면 결과가 나온다.



그럼, 이제 일반적인 음수와 음수의 곱에 대해서도 증명해 보겠다. 먼저 0 × b = 0 이라는 것을 증명한다. 0이 만약 3개 있다면 0 × 3 = 0 + 0 + 0 = 0 이니까 이런 것은 쉽다. 하지만 0에다 를 곱한 것도 이렇게 생각할 수 있을까? 0이 번 있다는 것은 상상할 수 없다. 그래서 증명을 하는 것이다. 0 × b = 0의 증명은 다음과 같다.



a ×0 = 0인 것도 마찬가지로 똑같이 보일 수 있다. 이제 본격적으로(-a) × (-b) = ab를 증명하겠다. 그 증명은 아래와 같다.



이제 원하는 사실, (-a) × (-b) = ab의 증명이 끝났다.


관련링크 : [오늘의 과학] "-1 x -1 = 1 ?" 수학자 박부성님이 지식iN에 묻습니다.

관련링크 : 오늘의 과학 저자와의 질의응답 전체보기

박부성 | 경남대학교 수학교육과 교수

출처 - http://navercast.naver.com/contents.nhn?rid=22&contents_id=106

'etc' 카테고리의 다른 글

programmer  (0) 2019.03.28
[수학] 1/0은 왜 안되나  (1) 2017.01.19
부동 소수점 설명  (0) 2017.01.18
부동 소수점의 이해  (0) 2017.01.18
particular, specific, certain  (0) 2016.09.09
:

[수학] 1/0은 왜 안되나

etc 2017. 1. 19. 15:08


많은 사람들이 나눗셈을 할 때 0으로 나눌 수 없다는 말을 들었을 것이다. 0으로 나눌 수 없는 이유는 모든 선생님이 가르쳐 주었을 텐데, 여전히 0으로 나누는 것이 왜 안 된다는 건지 모르겠다는 말을 많이 한다. 다른 수학 문제에 비하면 0으로 나누는 것을 도무지 모르겠다는 사람의 수는 그래도 적은 편이지만, 그래도 끊임없이 제기되는 문제인 것만은 분명하다. 한번 0으로 나눌 수 없는 이유를 짚어보자.


0으로 나누기,한번 해보자




두 실수가 주어지면 나눗셈을 하는 방법은 초등학교 고학년이 되면 배우게 된다. 예를 들어 3.764를 1.9로 나누려고 하면, 아래 그림처럼 나눠가기 시작한다.




이런 나눗셈 방법을 ‘긴 나눗셈’ 한자로는 장제법(長除法) 영어로는 long division이라고 부른다. 이제 같은 방법을 써서 1을 0으로 나눠보자.




좀처럼 나눗셈이 되지 않는 것을 알 수 있다. 물음표 부분에 어떤 수를 쓰더라도 파란색으로 쓴 부분이 0이 되어 도무지 소거가 안 되는 것이다. 이 경우에는 ‘아무리 나누고 싶어도 몫을 구할 수 없으므로’ 나눗셈이 불가능한 것이다. 어떤 수든 0이 아닌 수를 0으로 나누면 같은 현상이 생긴다. 이번에는 긴 나눗셈을 써서 0을 0으로 나눠보자.




이번에는 조금 전과 상황이 다른데, 물음표 부분에는 1을 쓰든, 2를 쓰든 어떤 수를 쓰더라도 나눗셈이 단번에 끝난다. 하지만 이래서야 몫이 1인지, 2인지 알 도리가 없다. 따라서 0으로 나눈 값을 결정할 수가 없다! 이 경우엔 ‘몫을 정할 수 없어서’ 나눗셈이 안 되는 것이다.



컴퓨터도 0으로 나누라고 하면,못 하겠다고 버틴다






계산기에 1을 0으로 나눠본 결과



이처럼 0으로 나누려고 하면 긴 나눗셈은 통하지 않는다. 그렇지만, 혹시 뭔가 신비하고 특별한 다른 나눗셈을 쓰면 0으로 나눌 수 있지 않을까? 수학자들에게는 숨겨놓은 비장의 방법이 있지 않을까? 수학의 원리가 가장 잘 들어있는 컴퓨터에게 0으로 나누기를 시켜 보면 어떨까?


예를 들어 윈도 계열 운영체제에서는 컴퓨터 프로그램 수행 중에 긴급 상황이 발생하면, 중앙처리장치로 ‘인터럽트’라는 것을 보내 프로그램을 잠시 멈추고 컴퓨터의 처리를 기다린다. 그런데, 이런 인터럽트가 발생하는 상황 중 가장 상위에 있는 것이 바로 ‘0으로 나누기’이다. 프로그램이 0으로 나눌 것을 요청하면 중앙처리장치에서는 ‘0으로 나누는 것은 오류’, ‘0으로 나눌 수 없습니다’ 영어로는 ‘Divide by 0’라는 결과를 내보낸다. 이 오류를 잘못 처리하면 심할 경우 파란 화면을 띄우고 나 몰라라 하는 경우도 있다. 예를 들어 윈도 계산기로 1÷0을 시키면 이런 화면을 볼 수 있다.


그런데 컴퓨터는 왜 0으로 나눌 수 없다고 하는 것일까? 먼저 근본적으로 컴퓨터는 나눗셈을 못한다는 것부터 언급해야겠다. 계산 능력이 탁월한 컴퓨터가 나눗셈을 못하다니 무슨 뚱딴지 같은 소리냐고 오해는 하지 말길 바란다. 컴퓨터가 나눗셈을 못한다는 말은, 컴퓨터가 나눗셈을 할 때 ‘뺄셈’을 반복해서 처리한다는 뜻으로 한 말이다. 사실은 뺄셈도, 덧셈과 보수 연산을 이용해서 처리한다. 어쨌든 0으로 나누려면 0을 빼는 일을 반복해야 하는데, 0을 아무리 빼도 값이 변하지 않으므로, 뺄셈만 반복하며 무한 루프에 빠져 버릴 것이다. 그냥 뒀다가는 0만 빼다가 세월 다 보낼 테니, 0으로 나누는 것을 금지할 수밖에 없는 것이다.

나눗셈의 정의를 바꾸지 않는 한,누구도 0으로는 못 나눈다




사실 이미 감은 잡혔겠지만, 누가 뭐래도 0으로 나누는 것은 불가능하다는 것을 ‘증명’할 수 있다. 이를 위해서는 나눗셈이 ‘곱셈의 역연산’임을 돌이켜 생각해 보기만 하면 된다. a÷b를 계산하여 c가 나온다는 것은 c×b = a가 성립한다는 뜻이다. 예를 들어, 3÷2가 1.5인 것은 1.5×2 = 3이 성립하기 때문이다. 이제 예를 들어 3을 0으로 나눌 수 있다고, 즉, 3÷0 = c 를 만족하는 c를 구할 수 있다고 해 보자. 정의에 따라 c×0 = 3이 성립한다는 말과 마찬가지다. 그런데, ‘음수 곱하기 음수는 양수’를 설명할 때 증명한 적도 있지만, 왼쪽 변은 항상 0이다! 따라서 0=3이 성립하게 되어, 모순이 발생한다. 모순이 생겼다는 것은 중간 단계 어디선가 잘못했다는 뜻인데, 어디가 잘못인지 알기 위해서는 거꾸로 올라가는 것이 도움이 된다. 즉, 0이 3과 다르다는 것에서 거꾸로 올라가면, 애초 c×0 = 3 이 성립하는 c가 있다고 가정했던 것이 잘못이라는 뜻, 즉, 3÷0=c인 c를 구할 수 없다는 뜻이 된다! 따라서 0으로 나누는 것은 불가능하다.


그런데 이런 설명으로는 0÷0을 구할 수 없다는 얘기를 하기에는 불충분하고, 조금 보충 설명이 필요하다. 이제 0÷0이 계산 가능하다고 하자. 이때는 1×0 = 0 , 2×0 = 0인 것을 알기 때문에 나눗셈의 정의로부터 0÷0 = 1 및 0÷0 = 2가 성립할 것이다. 따라서 1 = 2가 되어야 한다. 이것 역시 모순이다. (왜 모순일까? 예를 들어 페아노 공리계의 용어를 쓰면 1=1’인데, 이는 1이 어떤 수의 다음수도 아니라는 데 모순이다!) 이런 모순은 0÷0이 계산 가능하다는 가정을 한 데서 생기는 모순이다. 따라서 0÷0 역시 불가능하다.


그런데 왜 하필 0으로만 나눌 수 없나?




예를 들어 1.8으로는 나눌 수 있고, -π로도 나눌 수 있는데, 왜 하필 0으로만 안 되는 걸까라는 질문을 해 볼 수 있다. 이미 답은 나온 셈이지만, 0이 뭐 그리 대단한 수라서 그런 특혜를 누리는 걸까? 사실 0은 대단한 수가 아니라고 생각할 수도 있다. 어떤 수든 0을 더해도 그대로이기 때문에, 덧셈에 관한 한 0은 있으나마나 한 변변치 못한 수니까. 그러나 0을 빼놓고 생각하는 덧셈은 ‘오아시스 없는 사막’이라는 것을 알아 주기 바란다. 0이 덧셈에서는 변변치 못했을지는 몰라도, 곱셈에서만큼은 어마어마하게 사정이 다르다. 가히 무소불위의 권력을 휘두른다. 어떤 수를 곱해도 그 수를 무력하게 만들고 결과를 0으로 만들기 때문이다. 그런데 이런 성질을 갖는 수는 0밖에 없다! 바로 이런 이유 때문에 0으로는 나눌 수 없는 것이다. 본질적으로는 같지만, 조금 다른 방식으로 설명해 보자. 예를 들어 4×b를 생각하자. 이 값은 b가 달라지면 결과가 달라진다. 또한, 모든 수가 곱셈 결과가 될 수 있다는 것도 (예를 들어, 긴 나눗셈을 해 보면) 알 수 있다. 이 두 가지 성질은 4를 다른 수로 바꿔도 성립하는데, 오로지 0만 예외다. 0×b를 생각하면, b가 달라도 결과가 달라지기는커녕, 결과는 0 하나밖에 안 나온다! 적어도 곱셈에 대해서는 (따라서 나눗셈에 대해서도) 0만큼은 특별 대접을 하지 않을 수 없는 것이다.


0으로 나누면 무한대라던데요




0을 맨 처음 수로 취급한 인도에서 0으로 나누는 문제를 맨 먼저 고민했을 거라는 사실은 짐작할 수 있는데, 일례로 12세기의 유명한 인도 수학자 바스카라(Bhaskara Acharya, 1114~1185)는 자신의 저서 “릴라바티(Lilavati)”에서 1÷0을 무한대로 취급하였다. 사실 현대 수학자들도 극한의 개념을 써서 이렇게 취급하는 경우가 있을 만큼, 이런 주장에는 장점도 있다. 하지만 섣불리 1÷0을 무한대로 취급하는 것은 자칫 오해를 부를 수 있으므로 조심하는 게 좋다. 첫째, 1÷0 = ∞ 라는 말은, 1 = ∞ x 0 을 뜻하는 말이 아니라는 것이다. ∞는 숫자도 아니므로 무작정 숫자와 곱셈을 할 수는 없는 것이다. 둘째, 1÷0 = ∞ 라면 당연히 -1÷0 = -∞로 취급해야 할 것이다. 그렇다고 예를 들어 다음과 같이 주장하는 ‘우’를 범해서는 안 된다.




무한대는 수가 아니므로, 무한대와 관련한 연산은 보통의 의미에서의 사칙 연산의 규칙을 그대로 따르지 않을 수 있기 때문이다. 사실 무한대와 관련한 연산은 ‘극한의 개념’이나 ‘확장된 실수계의 개념’ 등을 이용할 때 비로소 제대로 된 의미를 가지는데, 그런 개념을 소개하는 것은 이 글이 의도하는 바의 범위를 넘으므로 생략하기로 한다. 그러나, 1÷0 = ∞ 이라는 표기를 쓴다고 해서 여전히 ‘0으로 나눌 수 있다’는 얘기는 아님을 다시 한 번 강조해 두고 싶다.


관련글 : -1×-1=1인 이유는?



글 정경훈 / 서울대 기초교육원 강의교수




출처: http://sonseungha.tistory.com/33 [Linuxias]

'etc' 카테고리의 다른 글

programmer  (0) 2019.03.28
[수학] -1*-1=1인 이유는  (0) 2017.01.19
부동 소수점 설명  (0) 2017.01.18
부동 소수점의 이해  (0) 2017.01.18
particular, specific, certain  (0) 2016.09.09
:

부동 소수점 설명

etc 2017. 1. 18. 16:19

정수와는 달리 실수는 크게 지수부분(exponent)과 소수부분(mantissa)으로 나누어 저장됩니다. 가장 많이 사용하는 IEEE754 규격의 예를들겠습니다.

 

32비트의 실수가 저장되는 방식은 32 = 1(sign bit)+8(exponent)+23(mantissa) 이렇게 나누어 저장이 됩니다. sign bit은 양수일 때 0, 음수일 때 1이구요. exponent는 2의 몇승인지 나타내지요. 이때 bias 127방식으로 저장되기 때문에 실제 지수에 127이 더해서 저장이 됩니다.  mantissa부분은 소수점 아래 24bit에 해당합니다. (지수에 127을 더하는 이유는 만약 데이터가 손상되서 지수부분이 모두 0000 0000이 되었다고 생각해 보죠. 지수가 0이면 결과는 1을 갖게 됩니다. 하지만 손상된 값은  0이 되는것이 좋겠죠. 만약 bias127을 사용했다면 결과는 어떤수의 -127승이 되어 거의 0이되는 효과를 갖게되죠.)

 

예를들어 십진수 12.5 를 저장한다고 하면, 우선 이진수로는..

1100.1 이렇게 되겠죠. 이것을 지수부와 소수부로 표현해 보면 1.1001*(2^3) 이렇게 되겠네요. (이때 소수점 왼쪽의 1은 hidden 1이라 하여 따로 저장되지 않습니다. 당연히 1밖에 올수 없으니까요..) 그럼 지수는 3이고 소수부는 1001 이 됩니다. bias를 적용하면 exponent=130 즉 이진수로 10000010 이 되지요. mantissa는 100 1000 0000 0000 0000 0000 이렇게 23bit를 차지하겠죠.

즉 실제로 저장되는 데이터는

0 1000 0010 100 1000 0000 0000 0000 0000

이렇게 되겠지요.(띄어쓰기는 임의로 했습니다)

 

 

실수라도 float은 4바이트고 double은 8바이트입니다.

 

IEEE 64비트 배정밀도(double-precision) 실수 표현 방식은 네이버 지식인 검색에서 IEEE 754 로 검색하면 아주 훌륭한 답변들이 많으므로 재탕은 생략하겠습니다.

 

참고로 말씀드리자면 double 전체 크기가 8바이트인데 정수 부분만 8바이트라면 소수 부분은 어디에 저장될까요? 소수부 + 정수부 + 부호비트 합하여 64비트(8바이트)입니다.

 

그리고 IEEE 표기법을 간단하게 말하자면 소수부와 정수부 따로 구분하지 않고 유효숫자와 지수형태의 표기방법을 사용합니다. 즉 100.1이라면 무조건 숫자는 정수 1자리, 나머지 소수(즉 1.001)로 표기하고 대신 지수부분을 2라고 써줍니다. 그렇다면 1.001 * 10^2(10의 2승)은 100.1이 되는 형태지요.


출처 - http://m.blog.naver.com/sncherry/50026275330

'etc' 카테고리의 다른 글

[수학] -1*-1=1인 이유는  (0) 2017.01.19
[수학] 1/0은 왜 안되나  (1) 2017.01.19
부동 소수점의 이해  (0) 2017.01.18
particular, specific, certain  (0) 2016.09.09
폰트, BitstreamVeraSansMono  (0) 2015.05.11
:

부동 소수점의 이해

etc 2017. 1. 18. 16:18

부동 소수점 표현은 아주 큰 수와 아주 작은 수를 효율적?으로 표현하기 위해서 사용한다. 여기서 효율적이란 표현은 정확하다는 표현은 아니다. 효율적일 수록 오차가 발생하기 마련이다. 우선 부동소수점표현을 어떤 방식으로 하는지 이해하고, 오차가 발생할 수 밖에 없는 원리도 이해해보자.

부동 소수점

우선 우리가 10진수를 10으로 나누거나 곱하면 소수점의 위치를 변경할 수 있다. 이와 마찬가지로 2진수 또한 2로 나누거나 곱하면 소수점 위치가 한 칸씩 이동된다.(자세한 설명은 하지 않겠지만, 이 원리를 이용해 진수변환도 한다는 것을 알아 두자.) 부동 소수점은 이런 원리를 이용해서 소수점의 위치를 나타낸다. 예를 들어 1001.1011 이란 수가 있다면, 부동 소수점은 이 수를 1.0011011 * 2^3 으로 표현 한다. 여기서 3은 위에서 설명한 원리를 통해 소수점의 위치를 정하게 되고 앞에 1.0011011은 1001.1011을 정규화한 것이다.

정규화 방법

정규화 방법은 정수부에 1만 남기도록 소수점을 이동하고 소수점에 관한 정보는 2^x으로 표현하는 것이다. 이런 표현은 고정 소수점 보다 효율적으로(적은 비트로) 큰 수를 표현할 수 있다.

부동 소수점 구조 알아보기

위 그림은 c/c++에서 float형의 표현 방식이다.

부호부 : 표현할 값이 0인 경우 양수, 1인 경우 음수

지수부:(2의 8승) -1가지 표현을 할 수 있다. 다시 말하면 2진수 체계에서 주어진 가수의 (2의 8승) -1가지 자리수 표현이 가능하다.

가수부: 가수부는 수의 모양을 알려주는데, 위에 예시의 수의 가수부는 00110110000000000000000(23자리)이 된다. 23bit(자리수)가 갖는 한계와 특징에 대해서는 따로 설명하겠다.

 

지수부

부동 소수점의 지수부는 컴퓨터가 수를 표현하는 일반적인 방식과 다르다. 바이어스(bias)표현 법인 이 방법을 알면 부동 소수점에 대해서 80%는 이해했다고 보면 된다.

예를 들어 char형 자료형으로 수를 표현하는 방법은 다음과 같다.

0000 0000 : 0

...

0111 1111 : 127

1000 0000 : -128

1000 0001 : -127

...

1111 1111 : -1

-128~127 까지 수를 표현

이렇게 음수를 표현하는 방법을 2의 보수법이라고 한다.

아무튼 char 뿐 아니라 int형도 이런 식으로 표현된다.

 

바이어스 표현법

지수부가 8bit인 부동 소수점을 표현할 때, 바이어스 표현법은 다음과 같다.

0000 0000 : -127

0000 0001 : -126

....

0111 1111 : 0

....

1111 1111 : 128

이런 식으로 표현하는 이유는 일반적인 정수를 나타낼 때와 지수를 나타낼 때, 0과 음수의 의미가 다르기 때문이다. 여러 특징이 있겠지만, 우선 밑이 양수인 경우 지수가 음수여도 값은 양수가 되기 때문이고, 지수가 음의 무한대로 뻗어나가더라도 밑이 무한히 0에 가까운 수가 된다.(0보다 큼)

따라서, 지수부가 8bit인 경우 가장 작게 표현할 수 있는 -127의 경우를 0000 0000으로 표현한다.

 

바이어스 상수

여기서는 IEEE754표준인 127바이어스법(8bit)을 기준으로 한다.

바이어스 상수 : 2^(n-1)-1

n:비트부 자리수(여기서는 8bit)

 

64바이어스법은 바이어스 상수가 100 0000이 되는데, 여기서는 127바이어스 법만 다룬다.

 

2의 보수법 + 바이어스 상수 = 바이어스 표현법

 

예를 들어 2의 보수법으로 127을 표현하면 0111 1111 이고 이를 바이어스 표현법으로 바꾸려면(float형) 127((2^8)-1)을 더하면 된다.

0111 1111 + 0111 1111 = 1111 1110 (127 바이어스 법으로 표현한 127)

 

예) -0.4를 16부동 소수점으로 바꾸어라. ( 지수부 5bit, 가수부 10비트)

0.4 = 0.0110011001100110...(2진수) = 1.1001100110...*2^-2

따라서 지수부는 -2가 된다. -2를 2진수로 나타내면(2의보수법) 1 1110이 된다.

지수부 비트가 5bit므로 바이어스 상수는 2^5-1 = 15 = 0 1111

지수부를 바이어스 표현 법으로 나타내기 위해 위 두값을 더한다.

1 1110 + 0 1111 = 0 1101

따라서,

0 1101 1001100110

 

예) 19.25를 127 바이어스법으로 바꾸면

19.25

= 10011.01(2진수)

= 1.001101 * 2^4

4 = 100(2진수)

여기서 비트부를 바이어스법으로 바꾸면

100 + 0111 1111 = 1000 0011이 된다.

따라서 0100 0001 1001 1010 0000 0000 0000 0000

로 표현할 수 있다.

 

0을 표현하는 방법

바이어스 표현 방법으로 지수의 표현은 -127 ~ 128까지 가능하다. 그러면 0의 표현은 어떻게 할까? 상식적으로 생각하면 0은 표현할 수 있는 가장 작은 양수 보다 작거나 같아야 한다. 부동 소수점 표현에서 표현할 수 있는 가장 작은 수는 다음과 같다.

따라서 모두 0인 경우를 0으로 하기로 한다.

 

2^-127보다 작은 수 표현

그런데 32bit float가 표현할 수 있는 가장 작은 수는 2^149이다. 위에서 모든 비트가 0으로 채워진 경우(지수부가 -127승인 경우)는 0을 표현한다고 했다. 그러면 어떻게 2^-127승 보다 더 작은 수는 어떻게 표현하는 것일까?

규칙

지수부가 모두 0인 경우는 특별한 경우로 나누어 생각하는 것이 좋다.

모든 비트가 0인 경우는 0을 나타낸다.(위에서 살펴봄)

지수부의 비트가 0이지만 가수부의 비트는 0이 아닌 경우, 유효수에서 정수값을 1이 아닌 0으로 한다. 그리고 지수값을 -126으로 약속 한다.

예를 들어,

0.00000000010000000001000 * 2^-126

0.10000000000000000000000 * 2^-126 = 2^-127

0.00000000000000000000001 * 2^-126 = 2^-149

따라서 32bit float형의 표현할 수 있는 가장 작은 수는 2^-149승이 된다.

참고로 2^-126은 다음과 같다.

1. 00000000000000000000000 * 2^-126 = 2^-126

 

지수부 비트가 모두 1로 채워진 경우

우선 이 경우 지수부는 128을 나타내는데 가수부의 형태에 따라서 두 가지 상태를 나타낸다.

가수부 비트가 모두 1인 경우 inf를 나타냄(무한)

가수부 비트가 모두 1이 아닌 경우 nan을 나타냄(미정값)

 

최대값

0x7f7fffff  float자료형이 표현할  있는 가장  수가 된다. 약 2^128승정도가 되는데

이런 식으로 표현된다.

 

부동 소수점의 오차

부동 소수점은 적은 비트로 큰 수를 표현할 수 있지만, 이런 효율성은 정확성을 떨어뜨릴 수 밖에 없다. float의 가수부의 크기는 23bit인데, 23은 실제로 값자리수(길이)를 나타낸다. 부동 소수점의 표현 방식상 정수값 자리수가 23을 넘어가게 되면 소수점 이동이 23(가수의 길이)이 넘어가므로 가수부의 길이를 초과하여 소수점 이하를 표현할 길이 없어진다. 길이를 넘어가게 되면 가수의 마지막 자리 값은 넘어간 수만큼의 0이 생긴다.

지수값이 24인 경우 0이 하나 생겼다. 2진수의 LSD(least significant Digit)가 무조건 0이기 때문에 홀수를 표현할 수 없다.

지수값이 25가 되면 0이 두개 생긴다. 따라서 4의 배수만 표현된다. 이런 식으로 오차가 점점 늘어나는데, 사실 이런 오차는 지수값이 23이넘어가면 값의 크기에 비해서 아주 작은 값이 되므로 그렇게 큰 차이는 아니지만, 정밀도가 떨어질 수밖에 없다. 따라서 double 타입의 자료형을 사용하면 이런 오차를 좀 더 줄일 수 있다.


출처 - http://thrillfighter.tistory.com/349

'etc' 카테고리의 다른 글

[수학] 1/0은 왜 안되나  (1) 2017.01.19
부동 소수점 설명  (0) 2017.01.18
particular, specific, certain  (0) 2016.09.09
폰트, BitstreamVeraSansMono  (0) 2015.05.11
받히다, 받치다, 바치다  (0) 2014.02.24
:

particular, specific, certain

etc 2016. 9. 9. 15:31

particularspecificcertain의 차이점은 뭔가요?


=>particular : '한정적'으로 명사 앞에 쓰여 '특별한'이라는 의미를 나타냅니다.
                      (ex)We must pay particular attention to this point.
(우리는 이 점에 특별한 관심을 기울여야 한다.)
                     
                      '서술적'으로 쓰여 '까다로운'이라는 의미를 나타냅니다.
                       (ex)She is very particular about her clothes.
(그녀는 옷에 대해 매우 까다롭다.)
 
 
   specific : '한정적'으로 명사 앞에 쓰여 '구체적인(=명확한)', '특정한'이라는 의미입니다.
                   (ex)I gave you specific instructions.
(난 네게명확한 지시를 내렸다.)
                         There are a lot of children with specific learning difficulties.
 
                  '서술적'으로 쓰여 '특유의(=독특한)'이라는 의미입니다.
                   (ex)It is a belief that is specific to this part of Africa.
                         (그것은 아프리카 이 지역 특유의 신앙이다.)
 
 
   certain : '한정적'으로 명사 앞에 쓰여 불특정한 사람이나 사물을 나타내어
                 '어떤', '무슨'이라는 의미입니다.
                  (ex)Certain people might disagree with this.
                        (어떤 사람들은 이것에 동의하지 않을 것이다.)
 
                 '서술적'으로 쓰여 '확실한(=틀림없는)', '확신하는'이라는 의미입니다.
                  (ex)It is certain that he will agree.
                        (그가 동의하리라는 것은 확실하다.)
                        I'm not certain who was there.
                        (거기에 누가 있었는지 확신이 서지 않는다.)


'etc' 카테고리의 다른 글

부동 소수점 설명  (0) 2017.01.18
부동 소수점의 이해  (0) 2017.01.18
폰트, BitstreamVeraSansMono  (0) 2015.05.11
받히다, 받치다, 바치다  (0) 2014.02.24
건전지 자가 교체  (1) 2013.10.28
:

폰트, BitstreamVeraSansMono

etc 2015. 5. 11. 11:12

BitstreamVeraSansMono


BitstreamVeraSansMono.ttf


'etc' 카테고리의 다른 글

부동 소수점의 이해  (0) 2017.01.18
particular, specific, certain  (0) 2016.09.09
받히다, 받치다, 바치다  (0) 2014.02.24
건전지 자가 교체  (1) 2013.10.28
태양계의 움직임  (0) 2013.10.28
:

받히다, 받치다, 바치다

etc 2014. 2. 24. 11:21

받히다: 어떤 곳에 충돌 하다.

받치다: 어떠한것을 지지 하다.

바치다: 두목에게 돈을 바치다

'etc' 카테고리의 다른 글

particular, specific, certain  (0) 2016.09.09
폰트, BitstreamVeraSansMono  (0) 2015.05.11
건전지 자가 교체  (1) 2013.10.28
태양계의 움직임  (0) 2013.10.28
개수와 갯수 회수와 횟수  (0) 2013.10.23
:

건전지 자가 교체

etc 2013. 10. 28. 14:17



'etc' 카테고리의 다른 글

폰트, BitstreamVeraSansMono  (0) 2015.05.11
받히다, 받치다, 바치다  (0) 2014.02.24
태양계의 움직임  (0) 2013.10.28
개수와 갯수 회수와 횟수  (0) 2013.10.23
그리스 문자  (0) 2013.09.16
:

태양계의 움직임

etc 2013. 10. 28. 14:16





'etc' 카테고리의 다른 글

받히다, 받치다, 바치다  (0) 2014.02.24
건전지 자가 교체  (1) 2013.10.28
개수와 갯수 회수와 횟수  (0) 2013.10.23
그리스 문자  (0) 2013.09.16
EntityCode  (0) 2013.09.13
: