레이블이 수학인 게시물을 표시합니다. 모든 게시물 표시
레이블이 수학인 게시물을 표시합니다. 모든 게시물 표시

2026년 2월 28일 토요일

독일 암호 기계 에니그마(Enigma) 동작 원리

Enimga = 수수께끼 = 2차 대전 때 독일 암호/복호 기계




에니그마의 특징 중 하나가 암호화와 복호화가 같은 방식인데 그대로 전류가 흐르는 방향만 바뀐다는 것이다. 고로 어떤 원문의 글자도 자기 자신으로 암호화 되지 않는다. 이건 약점이다. 그러나 회전판 3개의 초기 배치를 모르고, 글자를 칠 때마다 회전판이 돌아 연결 조합이 바뀌기 때문에 풀기는 불가능하다. 그런데 어떻게 암호가 풀렸을까?

2차 대전 때 연합군은 이 에니그마 기계도 입수하고 암호 책도 입수 했지만, 그 날의 초기 설정(암호 톱니 배치) 변경(그 날의 암구호 같은 것)을 모르니까 암호 해독이 힘들었다. 초기 설정 변경은 통신 초반에 2회 반복해서 보낸다. 이 2회 반복 때문에 결국 암호가 뚫리게 된다. 앞의 3글자가 2회 반복 된다고? 너무 뻔하잖아? 2회 반복해도 전혀 다른 문자열이 나온다.




※ 반이중 방식 : 송신할 때 버튼 누르고 말 다 한 후 "오우버(넘긴다)" 하고 버튼을 놓으면, 상대가 송신한 걸 받을 수 있음. 송신과 수신할 때의 전력의 세기가 다르기 때문에 안테나에 송신기와 수신기가 따로 연결 된다.

※ 전이중 방식 : 전화기처럼 양방향 통신이 가능한데, 전선을 1개(접지)/2개(1쌍)만 사용하기 위해 하이브리드 코일로 자기 신호를 죽여 스피커에 연결한다. 그러면 상대방 소리만 내 스피커에 나온다. 아니면 송수신 안테나 2개(주파수 대역도 2개), 송수신 전선 2쌍을 사용.

폴란드에서 암호 해독 기계를 만들었는데 독일이 에니그마를 업그레이드 (톱니 수가 늘어남) 하니 감당이 되지 않아 영국에 넘겼다. 영국의 동성애자 튜링이 더 강력한 암호 해독 기계를 만들었고, 결국 암호를 해독하게 되었고, 독일은 전쟁에 졌다. 문제는 독일군의 안일함에 있었다. 기계가 문제가 아니라 사람이 문제였던 것이다. 튜링이 만든 암호 해독 기계가 바로 우리가 사용하는 컴퓨터의 CPU의 동작 원리다. 튜링 머신이나 에니그마나 컴퓨터 CPU나 동작 원리가 비슷하다.

현재 상태 기억 + 뭔가 신호가 오면 → 다음 상태로 바뀌고 + 뭔가 동작 한다

확실히 인공 지능은 교사보다 더 많이 안다. 다만 말로만 설명하니 이해하기 힘들다는 것. 질문 하는 사람이 잘 질문 하고, 답변을 잘 이해하면 인공 지능은 최고의 스승이다. 예수가 말 한 미래에 올 보혜사(불교의 미륵 부처, 조로아스터교/유대교의 메시아)가 바로 인공 지능이 아닌가?

그리고 미국 극우 마가야. 남의 잠지에 관심 갖지 말아. 그건 그 사람 자유야. 동성애자가 너희들을 구했어. 동성애 하지 말라고 구약에 나오고, 유대교도였던 바울도 그렇게 얘기는 했지만, 예수는 그런 거에 관심도 없었어. 사람이 굶어 죽어 나갈 판인데 동성애 따위 신경 쓰겠니? 너희는 살인자야. 동성애자와는 비교도 안 되게 나쁜 애들이야. 극우는 전쟁만 일으킨다. 너흰 지옥행이다. 트럼프야 어린 애들 죽여 놓고 노벨 평화상 잘도 받겠다. 너도 윤석열과 같아. 정치 초보가 어떻게 대통령까지 되었을까? 후보자 만든 당원들이나, 거기에 투표한 꼴통 보수나. 그리고 미국/일본 정말 성진국답다. 결국 애들까지 건드리냐? 하기야 언제부터 성인이라고 정하는 게 무리지. 미성년자끼리 섹스 하잖아? 그냥 처녀막 없으면 다 같은 거야. ㅋㅋㅋ

법 왜곡 죄는 모든 재판에 적용해야지 왜 형사에만 적용하니? 민사 재판에서 뇌물 받아 먹고 싶어서? 이쪽에게 뇌물 받아 먹으면 저쪽에겐 화살 받아 먹는다? 부러진 화살 생각 안 나? 그러다 판사 죽는 수가 있어. 미친 집안에 걸려 봐. 사악한 판사 하나 보내고 나 천국 간다!

2025년 5월 3일 토요일

돈 숫자 단위 변형 Excel 함수 (미국 1000단위, 한국 10000단위, 단위 접미사 삽입)

큰 수를 콤마comma 수를 세어 미국 단위, 한국 단위로 읽는 건 힘들다. 그래서 그거 해 주는 함수 만든 거다.

인공 지능과 대화하면서 만든 코드이다. 인공 지능 정말 신기하다. 문법 오류도 아주 쉽게 잡고, 조금만 아이디어를 주면 바로 알아 듣고 고친다. 이러면 머리 굳은 노인 프로그래머들도 코딩하겠는데? 실력 없는 젊은 애들 직장에서 정말 잘리겠다.

Excel VBA 자료형에 따라 숫자의 정밀도가 차이가 나기 때문에, 들어 온 숫자를 정수 문자열로 바꾼 후에 1000단위 3개 문자, 10000단위 4개 문자로 구분해서 처리 하는 방식이다. 이렇게 하면 정밀도와 관계 없이 가장 큰 수도 처리할 수 있다. 아무리 큰 수를 넣어도 Excel에서 표현 가능한 크기의 숫자로 바꾸기 때문에 낮은 자리의 숫자들은 잘린다.

사람이 입력한 큰 수 → Excel 자료형에 맞게 잘림 → 숫자 문자열 변형 → 단위 변형


1. 미국식 단위 표현


단위 명칭 발음 단위 미국 (3승 천단위) 십승 천승 동양단위
thousand싸우전드1,00031
million밀리언1,000,00062100만
billion빌리언1,000,000,0009310억
trillion트릴리언1,000,000,000,0001241조
quadrillion쿼드릴리언1,000,000,000,000,0001551000조
quintillion퀸틸리언1,000,000,000,000,000,000186100경
sextillion섹스틸리언1,000,000,000,000,000,000,00021710해
septillion셉틸리언1,000,000,000,000,000,000,000,0002481자
octillion옥틸리언1,000,000,000,000,000,000,000,000,0002791000자
nonillion노우닐리언1,000,000,000,000,000,000,000,000,000,0003010100경
decillion디실리언1,000,000,000,000,000,000,000,000,000,000,00033111구

유럽의 영/프/독은 같은 단위 명칭이라도 숫자 단위가 다르다. 골 때린 애들이네...
미국은 3승 단위로 나가는데, 유럽은 6승 단위로 나간다. 이것도 나라에 따라 또 다름.

접미사 -illion는 라틴어 접미사이다. 앞의 mi-, bi-, tri- quadr- 접두사는 1, 2, 3, 4
원래 mi-는 1천이란 의미이다. 그런데 영어에선 thousand가 1천이라 1천의 1천? (^^)"

Excel에선 정수 29자리 또는 소수점 이하 포함 28~29자리까지 정확하게 표현 가능
그러니까 옥틸리언까지 표현 가능하다.

2. 동양식 단위 표현


한국 중국 일본 단위 동양단위 (4승 만단위) 십승 만승
일 一壹一壹 yī一 いち100
십 十拾十拾 shí十 じゅう1010.25
백 百伯陌百伯陌 bǎi百 ひゃく10020.50
천 千仟阡千仟阡 qiān千 せん100030.75
만 萬万万萬 wàn万 まん1'000041
억 億亿億 yì億 おく1'0000'000082
조 兆兆 zhào兆 ちょう1'0000'0000'0000123
경 京京 jīng京 けい1'0000'0000'0000'0000164
해 垓垓 gāi垓 がい1'0000'0000'0000'0000'0000205
자 秭시枾秭 zǐ𥝱 じょ / 秭 し1'0000'0000'0000'0000'0000'0000246
양 穰壤穣 ráng穣 じょう1'0000'0000'0000'0000'0000'0000'0000287
구 溝沟 gōu溝 こう1'0000'0000'0000'0000'0000'0000'0000'0000328
간 澗涧 jiàn澗 かん1'0000'0000'0000'0000'0000'0000'0000'0000'0000369
정 正正 zhèng正 せい1'0000'0000'0000'0000'0000'0000'0000'0000'0000'00004010
재 載载 zài載 さい1'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'00004411
극 極极 jí極 ごく1'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'00004812

두 글자 이상 단위 표시는 불교 용어라서 쓸 일 없을 것이다. 예) 무량수 = 10⁶⁸ or 10¹²⁸ 

Excel에선 정수 29자리 또는 소수점 이하 포함 28~29자리까지 정확하게 표현 가능하니
양까지 표현 가능하다.

위의 표만 가지고는 유럽, 미국, 동양 단위로 제대로 변환 해서 읽을 수 없으니, 아래 표를 출력해서 들고 다니며 이용한다. 아니면 이미지로 스마트폰에 다운 받아 가지고 다닌다.


  1. 한국에선 0이 있으면 숫자와 단위까지 생략하여 읽는다. 예) 1004 = 천사
  2. 한국에선 첫 숫자가 1이면 숫자 발음 "일"은 생략한다. 예) 1004 = 천사, 10004 = 만사
  3. 앞에 추가 숫자를 못 붙이도록 $₩€ 등의 기호를 붙인다. 예) ₩1004 = ₩천사
  4. 끝에 추가 숫자를 못 붙이도록 단위(원=엔=위안)를 붙인다. 예) ₩1004원 = ₩천사원
  5. 인도 아라비아 숫자 1↔4, 3↔8 왜곡 가능하니 한글 발음으로 적는 게 좋을까?
  6. 한글이라 하더라도 일↔이, 삼↔사 왜곡 가능하니 한자를 섞을까?
  7. 한자라 하더라도 一 ↔ 二 ↔ 三, 六 ↔ 八, 七 ↔ 十 ↔ 九 왜곡 가능하니 차라리... 


다음 함수는 숫자를 넣어 주면 1천 단위로 끊어서 미국 단위를 한글 한 글자로 표시한다.

미국단위표시(123456789012345678901234567890,2) = 1.23456789012346E+29
사람이 입력한 숫자를 Excel에서 표현 가능한 숫자로 변형한 내용이다.

미국단위표시(123456789012345678901234567890,1) = 
입력 : 123456789012345678901234567890
변형 : 123456789012346000000000000000
30자리 정수 문자열로 바꾼 결과이다.

미국단위표시(123456789012345678901234567890,0) = 
구분 : 123,456,789,012,346,000,000,000,000,000
단위 : 123옥456셉789섹12퀸346쿼
미국 단위 발음을 한글 한 글자로 표시하여 삽입한 것이다.


Function 미국단위표시(ByVal 수 As Variant, ByVal 옵션 As Integer) As String
    Dim 정수문자열 As String
    정수문자열 = Format(수, "0")  ' 지수 표현을 정수 문자열로 변환

    Dim 단위문자 As String: 단위문자 = " 싸밀빌트쿼퀸섹셉옥논데"
    Dim 길이 As Long: 길이 = Len(정수문자열)
    Dim 결과 As String: 결과 = ""
    Dim i As Long, 블럭 As String
    Dim 단위인덱스 As Long: 단위인덱스 = 0

    ' 오른쪽에서부터 3자리씩 끊기
    For i = 길이 To 1 Step -3
        If i - 2 >= 1 Then
            블럭 = Mid(정수문자열, i - 2, 3)
        Else
            블럭 = Mid(정수문자열, 1, i)
        End If
        
        If Val(블럭) <> 0 Then
            결과 = CStr(Val(블럭)) & Mid(단위문자, 단위인덱스 + 1, 1) & 결과
        End If
        단위인덱스 = 단위인덱스 + 1
    Next i

    Select Case 옵션
        Case 0
            미국단위표시 = 결과               ' 한글 단위 표기
        Case 1
            미국단위표시 = 정수문자열         ' 정수 문자열 그대로
        Case 2
            미국단위표시 = CStr(수)           ' 원래 입력 그대로 문자열로
        Case Else
            미국단위표시 = "오류"             ' 잘못된 옵션 입력 시 오류 반환
    End Select
End Function


  1. Variant 데이터 형은 가장 큰 수를 넣을 수 있다.
  2. Format(수, "0") 함수는 수를 정수 문자열 형태로 바꾼다.
  3. Mid(정수문자열, i - 2, 3) 함수는 i - 2 위치에서 3개 문자를 뽑는다.



다음 함수는 같은 짓을 1만 단위 동양 단위로 표시 해 주는 것이다.

한국단위표시(123456789012345678901234567890,0) =
구분 : 12'3456'7890'1234'6000'0000'0000'0000
단위 : 12양3456자7890해1234경6000조


Function 한국단위표시(ByVal 수 As Variant, ByVal 옵션 As Integer) As String
    Dim 정수문자열 As String
    정수문자열 = Format(수, "0")  ' 지수 표현을 정수 문자열로 변환

    Dim 단위문자 As String: 단위문자 = " 만억조경해자양구간정재극"
    Dim 길이 As Long: 길이 = Len(정수문자열)
    Dim 결과 As String: 결과 = ""
    Dim i As Long, 블럭 As String
    Dim 단위인덱스 As Long: 단위인덱스 = 0

    ' 오른쪽에서부터 4자리씩 끊기
    For i = 길이 To 1 Step -4
        If i - 3 >= 1 Then
            블럭 = Mid(정수문자열, i - 3, 4)
        Else
            블럭 = Mid(정수문자열, 1, i)
        End If
        
        If Val(블럭) <> 0 Then
            결과 = CStr(Val(블럭)) & Mid(단위문자, 단위인덱스 + 1, 1) & 결과
        End If
        단위인덱스 = 단위인덱스 + 1
    Next i

    Select Case 옵션
        Case 0
            한국단위표시 = 결과               ' 한글 단위 표기
        Case 1
            한국단위표시 = 정수문자열         ' 정수 문자열 그대로
        Case 2
            한국단위표시 = CStr(수)           ' 원래 입력 그대로 문자열로
        Case Else
            한국단위표시 = "오류"             ' 잘못된 옵션 입력 시 오류 반환
    End Select
End Function



다음 함수는 1만 단위 동양 단위를 서양식 콤마 대신 따옴표로 표시 해 주는 것이다.

너무 큰 수는 콤마나 따옴표 보고는 읽을 수 없다. 그래서 앞의 함수를 만든 것이다.

만단위표시(123456789012345678901234567890,0) =
12'3456'7890'1234'6000'0000'0000'0000


Function 만단위표시(ByVal 수 As Variant, ByVal 옵션 As Integer) As String
    Dim 정수문자열 As String
    정수문자열 = Format(수, "0")  ' 지수 표현을 정수 문자열로 변환

    Dim 길이 As Long: 길이 = Len(정수문자열)
    Dim 결과 As String: 결과 = ""
    Dim i As Long, 블럭 As String
    Dim 첫블럭 As Boolean: 첫블럭 = True

    ' 오른쪽에서부터 4자리씩 끊기
    For i = 길이 To 1 Step -4
        If i - 3 >= 1 Then
            블럭 = Mid(정수문자열, i - 3, 4)
        Else
            블럭 = Mid(정수문자열, 1, i)
        End If

        ' 왼쪽에서 오른쪽으로 결과 조립
        If 첫블럭 Then
            결과 = 블럭
            첫블럭 = False
        Else
            결과 = 블럭 & "'" & 결과
        End If
    Next i

    Select Case 옵션
        Case 0
            만단위표시 = 결과
        Case 1
            만단위표시 = 정수문자열
        Case 2
            만단위표시 = CStr(수)
        Case Else
            만단위표시 = "오류"
    End Select
End Function



굥썩혈, 쥴리김 친일 반란 무리들이

  1. 똥개 검사로 모함을 하고
  2. 모지리로 암살 실패 하고
  3. 군대로 쿠데타 실패 하고도
  4. 개판으로 유죄 판결 하려는데


여기서 살아 남으면 이재명은 하늘이 돕는 구세주겠다
반란 무리가 다시 정권을 잡는 건 불가능하니, 
대신 국민이 투표할 대상을 없애버리겠다?
이걸 멀뚱 멀뚱 보고 있어야 하나 
아니면 가서 Big Dog 법원에 불이라도 질러야 할까?
똥검개판 새끼들이 완전 미쳤네? 
불알 젖통 흔들며 똥꼬 보지 좆 까는 창피한 짓 좀 그만 해라.
다시 쿠데타 일으켜서 종신 독재 못 하면, 
어차피 정권 바뀌어 감옥 가게 되어 있어!
국가와 민족을 위해서 그냥 감옥 가라! 
안 가면 우리가 얼려 죽이고, 굶겨 죽이고, 때려 죽인다?

2025년 3월 26일 수요일

유클리드 기하학(밧줄로 정다각형, 타원, 포물선, 쌍곡선 작도), 임의각 3등분, 원주율, 황금비, 복사지/복사용지 종횡비

 2025-12-27 수정


옛날에 건축이나 농지 면적 계산을 할 때 밧줄이나 실을 이용해서 측정을 했다. 밧줄로 원과 직선을 그릴 수 있었다. 자와 컴퍼스는 필요 없다. 이런 작은 것으론 땅 위에 큰 원과 긴 직선을 못 그린다. 여하튼 그 과정에서 기하학이 탄생하고 유클리드가 그런 방법들을 모아 깔끔하게 증명하여 정리했다. 고대 이름 없는 천재들이 발견한 것들을 모두 모아 놓으면 그게 학문이다. 그런 이유로 증명이 없었지만 정답인 것을 이미 알고 있는 방법들도 있었다. 원리는 모르겠으나 실험적으로 증명된 방법들 말이다.

가장 간단한 동양의 피타고라스 정리 증명

※ 페르마의 정리 : 직각 삼각형 3변에 대해 aⁿ + bⁿ = cⁿ, n > 2, abc ≠ 0 조건을 만족하는 (a, b, c) 세 쌍의 수는 없다. 당연하겠지. 직각 삼각형의 (a, b, c) 세 쌍의 수는 당연히 a² + b² = c² 조건을 만족 시키니까 좌우에 같은 숫자 x만 곱해야 등식이 성립하지. 3승 이상에 대해 조건을 만족하려면 x = a = b= c 가 되어야 하는데, 이런 x는 0 외엔 없지. 또한 a = b = c의 경우는 정삼각형이라 피타고라스 정리를 만족 시킬 수 없지.

아래는 기초적인 작도 방법이다. 자가 없어도 정확하게 길이와 각도를 측정할 수 있는 방법이다. 자와 각도계를 만들 수도 있다. 임의의 선은 N등분 하는 게 가능하다. 임의의 각도는 3등분 하는 게 불가능하다. 특정 각도(45도, 90도, 180도, 360도)만 3등분 할 수 있다. 이런 이유로 1도 단위 360도 각도계는 만들기 힘들다. 이 글 마지막에 3도 단위까지는 가능함을 보였다.


이건 아주 쉬운 방법이지만 대형 건축물 길이 다룰 때는 안 맞는 방법이다.


이것도 아주 쉬운 방법인데 대형 건축물 길이 다룰 때도 쓸 수 있다.


이건 명확하게 각을 3등분 할 수 있고 매우 실용적인데, 직각 종이가 없으면 안 된다.
그런데 90도 이상에선 어떻게 접지? 번거롭게 나눠서 3등분 해서 다시 합해야 한다.

이건 쉬운 방법처럼 보이지만 1개 길이와 3개 점을 일치 시키는 직선을 그리기는 실제로 힘들다.
이것도 90도 이상에선 안 되니까 나누어서 3등분 하고 다시 합해야 한다.

실제로는 물리적 크기가 있어서 작은 각을 3등분 하기는 힘들고 180도 이상도 불가능함.
0도나 180도에 가까워지면 실제론 써먹기 힘들다는 것. 90도 주변에선 쓸만함.


나선 곡선은 기계로는 그려도 손으로는 못 그린다. 이건 360도 이상에서도 통한다.

만약 임의의 각도를 3등분 하고 싶다면, 위의 원리를 적용할 수도 있다. 이건 수학적으로 엄밀하지 않지만, 실용적으로 사용할 수 있는 방법이다. 수학적 증명은 못 해도 실험적 증명이 되면 실전에 쓸 수 있다. 기타 나선형 곡선을 그리면 회전각과 반경이 비례하기 때문에 교차점을 찾아서 선을 3등분 하는 걸로 각을 3등분 할 수 있으나, 문제는 정확한 나선형은 그럼 어떻게 그릴 수 있느냐는 문제가 있다. 정확한 곡선을 그리는 게 더 힘들다. 고로 3등분 곡선들은 그런 도구를 만들기가 더 힘들다.





먼저 직각을 그릴 수 있어야 했다. 사각형이 공간 활용 면에서 좋기 때문이다. 석기 시대에는 원을 그리고 집을 지었는데 나중에 사각형 집을 짓는 똑똑한 놈들이 나타나서 밀어낸다. 동서남북을 정확하게 그리기에도 좋으며 기준 축을 삼기에도 좋다.





직각 그리는 방법을 잘 보니 그걸로 선도 2등분할 수 있겠더라. 이렇게 하여서 길이를 정확히 측정할 수 있는 자를 만들 수 있겠다. 2진수이긴 하지만 일단 정확하게 측정을 할 수 있는 자를 만들 수 있으니 좋다. 뭐든 2등분은 쉬운 거 같다. 3등분이 어렵다. 소수(素數)로 나누기는 어렵다. 수에서 원소(元素) 같은 숫자들이다. 그럼 3등분 자는 어떻게 만들지? 반대로 하는 거지. 나누는 게 아니라 기본이 되는 눈금 1의 길이를 정한 후에 3배 단위로 눈금을 정하는 것이다. 





각도 2등분 할 수 있게 되어 각도기도 만들 수 있게 되었다. 2진법이긴 하지만 각도를 정확하게 측정할 수 있게 되었다. 수학 삼각함수에서 라디안이 바로 2진법이다. 뭐든 반으로 나누는 것은 쉬운 거 같다. 어떤 꼴통이 각을 3등분할 수 있다고 우기던데 그 친구 주장은 1/2 나누기를 무한 반복해서 1/3에 접근할 수 있다는 것이다. 1/3에 도달할 수 있는지 죽을 때까지 해 봐라. 





같은 원리로 정삼각형도 쉽게 그릴 수 있더라. 이렇게 하여 60도 각도를 그릴 수 있었고, 그 절반인 30도, 그 절반인 15도가 가능해서 각도기에 눈금을 그릴 수 있었다. 90도에 대해서는 3등분이 가능하다. 45도에 대해서도 3등분이 가능하다. 이리하여 360도를 24등분 할 수 있게 되어 해시계에 하루 시간을 24시간으로 그릴 수 있게 되었고 계절도 24절기로 나누게 된다. 그리고 6각, 12각, 24각 등 2배각을 정확히 그릴 수 있어 원주율도 반복 계산으로 구할 수 있게 되었다.


위의 계산은 원주율 3.141592까지 확정하는데 필요한 반복 회수
3.141까지 확정하는데 6회 반복만 필요함
문제는 (계산기 없이) 제곱근 계산을 해야 하는 피곤함이 있음
제곱근은 아래 원의 면적 계산하는 것처럼 나머지를 다시 계속 10등분 하는 방법 사용


2의 제곱근을 구할 때 2*10² = 200으로 앞자리를 구한다.
나머지 4개에 대해 2*100² = 20000으로 확장해서 뒷자리를 구한다.
즉 가로 세로 140의 정사각형에 나머지 4개가 400개가 되는 것이다.
이렇게 하면 3자리 숫자(1.41xxx)를 구할 수 있는데 이 정도면 정확한 것이다.



이집트에서 사용한 면적으로 원주율을 계산할 수도 있다. 
여기서 면적 계산 방법은 삼각형으로 나눠 면적을 반복 계산하는 게 있고, 
좀 더 단순 무식하게 원을 가로 세로 격자로 나눈 후에 
4각형(1단위 면적)과 3각형(1/2 단위 면적)의 숫자를 세는 방법이 있다.
매우 간단하면서도 정확도가 생각보다 높다는 것.
단순하게 4칙 연산으로 원주율을 구할 수 없을까?


천재 뉴튼이 발견한 다항식으로 계산하는 방법이다. 
매우 많은 계산을 해야 하지만 단순한 가감승제로 계산이 끝난다는 장점이 있음
제곱근 계산할 필요도 없고, 면적 계산하기 위해 격자의 사각형 수를 셀 필요도 없음







직각을 2등분하여 대각선을 그릴 수 있어 쉽게 정사각형도 그릴 수 있었다. 이제 원형 집에서 좀 더 공간 활용이 높은 사각형 집에 살 수 있겠다. 특히 정사각형은 면적 계산할 때 매우 편리했다. 작은 정사각형이 몇 개 들어가는지 계산하면 되기 때문이다. 복잡한 모양의 농지(기형적 농지)를 작은 사각형과 삼각형으로 나눌 수 있다면 면적 계산이 가능하다. 기형(畸形)이란 단어의 의미가 사각형 면적을 제한 뙈기밭의 형상이란 뜻이다.






반으로 잘라도 같은 종횡비를 유지하는 것이 복사 용지다. 이건 1과 대각인 √2의 비율이다. 정확히 숫자로 표현하기 무리(無理)하여 무리수(無理數)라 한다. 허나 이 비율의 책상을 2개 붙이면 면적이 2배인 같은 비율의 책상이 된다. 또한 인간의 시야 종횡비인 1.5와 근접한 비율이다. 즉 자연스러운 시야각과 비슷하면서 수학적 의미가 있는 비율이다. 이것도 황금비라 부른다. 

인공 지능이 검색 시간을 줄여 주네 (편하지만 많은 사람 직업 잃겠다 ㅋㅋㅋ)




전지를 계속 1/2로 자르면 A나 B 뒤에 붙은 숫자가 커진다

복사지 비율 = √2 = 1.4142135623730950488016887242097
A3 : 297 × 420mm = A4의 2배
A4 : 210 × 297mm = A3의 1/2
B4 : 250 × 353mm = B5의 2배
B5 : 176 × 250mm = B4의 1/2
B4 ÷ A4 세로 = 1.1904761904761904761904761904762
B4 ÷ A4 가로 = 1.1885521885521885521885521885522
B4 ÷ A4 평균 = 1.1895141895141895141895141895142 = 119%
A4 ÷ B4 평균 = 0.84067933683784876668014557217953 = 84%

보통 들고 다니는 책가방 크기는 애매모호한 B4 크기이다.
B4 용지는 넣을 수 없고, A4 용지를 넣으면 공간이 너무 남는다.
책가방은 책과 비슷한 크기여야 하는 거 아닌가?






사람들이 가장 아름답게 보인다고 주장하는 황금비이다. 특히 정오각형 별이 황금비 덩어리다. 다시 말 해서 황금비를 이용해서 정오각형 별을 그릴 수 있다는 말이다. 정오각형은 실용성은 별로 없다. 신비한 상징으로 많이 사용되어 군대, 공산국가 상징에 많이 보인다. 피타고라스 학파의 상징이었다고 한다. 역시 인간의 시야 종횡비인 1.5와 근접한 비율이다. 즉 자연스러운 시야각과 비슷하면서 정사각형을 빼면 남는 부분이 역시 황금비라는 수학적 의미가 있는 비율이다.

피보나치 수열 = 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89... (앞의 2개 값을 더한 게 다음 값)
피보나치 수열 = 1, 2, 3, 5, 8, 13, 21, 34, 55, 89... (귀찮아서 처음 0, 1은 생략한다)

황금비 = 피보나치 수열에서 무한 반복한 극한 값 ÷ 바로 앞의 값
황금비 = (√5 + 1)/2 = 1.6180339887498948482045868343656


정5각형과 별 모양에 숨어 있는 황금비를 알아야 정5각형을 그릴 수 있다.

정오각형을 그리려면 원의 반지름과 한 변의 길이의 관계를 알아야 한다. 360도/5=72도 이등변 삼각형의 변들의 길이 비율을 알아야 한다는 말이다. 수학이 발달하지 않았을 시절 이걸 발견할 수 있는 방법은 직접 길이를 측정해서 비교하는 방법이다. 원을 그려 바퀴를 만들어 둘레를 측정하여 원주율 구하는 것과 비슷하다. 그랬더니 황금비의 어느 구석과 일치하는 걸 알았던 거 같다. 증명은 못 하겠지만 같다는 것은 먼저 알 수 있었다. 그러면 작도는 쉽다.



정오각형부터는 그리는 원리를 직관적으로 알기 어렵다. 소수(素數)에 해당하는 각의 도형은 역시 그리기 어렵다. 각도도 2배, 3배, 5배 그리는 것은 쉬운데 역시 나누기가 어렵다. 뭐든 2로 나눌 수 있어 정말 다행이다. 아마 정오각형 작도법을 발견한 후에 신기해서 자신들의 상징으로 사용한 거 같다. 7각형 이상의 작도는 현실에선 쓸모가 없다. 6각형까지 작도가 가능하면 24각형을 작도로 그릴 수 있는데 이게 15도 단위의 시계이며 24절기이다.

눈금자 없이 그릴 수 있는 도형은 아래와 같다. 이것을 이용해서 각도계를 만든다면?


등분 각형 각형 각형
1 4 5 6
2 8 10 12
4 16 20 24
8 32 40 48
등분 각도 각도 각도
1 90 72 60
2 45 36 30
4 22.5 18 15
8 11.25 9 7.5

위에서 소수점 이하 각도는 사용하지 않는다고 하면 다음과 같은 각도 구분이 가능하다.

각도 차이 24각 40각
0 0 O O
9 9 O
15 6 O
18 3 O
27 9 O
30 3 O
36 6 O
45 9 O O
54 9 O
60 6 O
63 3 O
72 9 O
75 3 O
81 6 O
90 9 O O
99 9 O
105 6 O
108 3 O
117 9 O
120 3 O
126 6 O
135 9 O O
144 9 O
150 6 O
153 3 O
162 9 O
165 3 O
171 6 O
180 9 O O
189 9 O
195 6 O
198 3 O
207 9 O
210 3 O
216 6 O
225 9 O O
234 9 O
240 6 O
243 3 O
252 9 O
255 3 O
261 6 O
270 9 O O
279 9 O
285 6 O
288 3 O
297 9 O
300 3 O
306 6 O
315 9 O O
324 9 O
330 6 O
333 3 O
342 9 O
345 3 O
351 6 O
360 9 O O

보면 3도, 6도, 9도 차이가 나는데, 6도에 대해선 임의의 각 2등분을 적용하면 최소 눈금 3도 각도의 각도계를 그릴 수 있다. 9도 각도도 옆의 3도 각도를 이용해서 쉽게 3등분 할 수 있다. 이러면 360 / 3 = 120각형이 가능하다. 그렇다면 옛날 사람들이 만든 360도 각도계는 어떻게 만든 것이지? 최소 눈금 1도를 어떻게 그렸냐? 0.5도, 0.25도까지 이용하면 가능할 수도 있겠다.


원 이외의 곡선 중에 쓸모 있는 게 있는데 타원과 포물선이다. 포물선은 반사 망원경의 거울 만들 때 필요하다. 원을 찌그러뜨리거나 늘리면 타원이 된다. 타원을 아주 길게 만들면 끝 부분은 포물선과 매우 비슷해진다. 그런데 쌍곡선은 어디에 쓸까?


쌍곡선雙曲線 : 쌍을 이룬 곡선
평면 위의 두 점(초점)에서의 거리의 차가 일정한 점의 궤적(자취) 
포물선抛物線 : 포물(포탄)의 궤적
평면 위의 한 점(초점)과 한 직선에서의 거리가 같은 점의 자취(궤적) 
타원楕圓 : 길쭉한 원
평면 위의 두 점(초점)에서의 거리의 합이 일정한 점의 자취(궤적) 
원뿔곡선/圓뿔曲線 = 원추곡선/圓錐曲線
원뿔의 꼭짓점을 통하지 않는 임의의 평면으로 잘라 낸 면의 곡선

이것을 줄/실과 자로만 그리는 방법이 아래와 같다.

타원 그리는 방법은 원 그리기와 비슷하다. 중심이 2개인 것만 다르다.
원은 1개의 중심에 실 끝을 고정한 후에 다른 실 끝에 연필을 달아 돌리면 되고,
타원은 2개의 중심 점에 실 끝을 고정한 후에 실 중간에 연필을 걸어 돌리면 된다.


원리는 위와 같은 걸 찾아 보면 되는데 이런 게 시험 문제에 나온다고?
지능 테스트 하는 건가? 이런 건 취미 생활로 하면 되지 쓸 데 없는데?



대통령이
  1. 바보라도 위험하니 파면
  2. 미쳤으면 더 위험하니 파면
  3. 사악하면 더욱 위험하니 파면
  4. 반역자면 더더욱 위험하니 파면
바뀐애는 1개에 해당 되나 윤적혈은 3개나 해당 된다.
윤적혈은 결혼 잘 못 해서 망한 것이다.
이를 볼 때 결혼은 정말 위험하다.
결혼 회피 대상 1호는?
무속인, 연예인, 논다니

2018년 1월 18일 목요일

프로그래밍 때 골치 아픈 역삼각함수 처리법

아주 가끔 프로그래밍을 할 때가 있는데 역삼각함수만 나오면 결과가 꼬여서 골치 아프게 한다. 그래서 처리 방법을 정리 해 둔다. 역삼각함수는 0~90도 범위 안에서만 사용하면 아무 문제가 없다. 이 범위를 벗어나면 부호를 따져서 제대로 된 각도를 얻어야 한다.





삼각함수는 직각좌표계를 극좌표계로 바꾸면서 무한 회전(무한 각도)하면서 반복하는 값들로 만들어진 함수라 1대1 대응이 안 된다. 고로 역함수를 구할 때는 각도 범위를 제한할 수밖에 없다. 이 범위가 sin, cos, tan 모두 다르기 때문에 섞어 사용하면 계산 결과가 꼬인다. 그럼 어디가 문제인지 정말 찾기 힘들게 된다. 역함수를 쓸 때는 0~90도로 범위를 제한한다.

삼각함수를 쓸 경우는 시계회전(0~360)인지 좌우회전(-180~+180)인지만 결정해서 경계를 넘어갈 때 처리만 해 주면 문제없다. 표시는 각도로 하고 계산할 때는 라디안을 사용하는 게 아주 편하다. 이것 외엔 문제가 없다.

각도를 구해야하는 경우는 역삼함수를 써야 하는데 이 경우 사분면 결정을 해야 한다. 사분면에 따라 각도 보정을 해 주어야 한다. 또한 프로그램 할 때는 항상 특이 지점(0, 무한)에 대한 처리를 해 주어야 한다. 나누기 하는 숫자가 0인지 아닌지 등 말이다.





계산에 쓰이는 수학 좌표계와 컴퓨터 모니터 화면의 좌표계 차이로 계산이 번거롭다. 마우스로 입력을 받을 때도 마찬가지다. 수학에서 각도 방향과 시계의 각도 방향이 달라서 계산이 번거롭다. 이런 경우 표현 좌표와 계산 좌표 사이의 변환이 필요하다. 복잡한 계산은 수학 좌표계로 하고 마지막에 표현만 화면에 맞게 바꾼다. 보통 프로그램 할 때는 나중에 고치기 쉽도록 다음 3가지를 분리한다.


  1. 계산/프로그램 : 예) 게임 엔진
  2. 자료/데이터 : 예) 유닛 객체 데이터
  3. 표현/디자인 : 예) 유닛 애니메이션 이미지






매일 계란을 먹듯이
많은 생명이 태어나자마자 죽는다.
우리도 그처럼 이 땅에 버려진 것들이다.
죽은 후엔 영원한 평온이 있겠지.

2017년 1월 23일 월요일

컴퓨터 부동 소수점, 고정 소수점 이해, Visual Basic Macro에서 사용하는 데이터 형식

2026-08-12 수정

수학에서 말하는 수의 종류와 컴퓨터에서 표현법이다.

  • 자연수自然數 : 0 이상의 양의 정수, 예) 0, 1, 2, 3...
  • 정수整數 : 소수가 없는 정수, 예) –3, -2, -1, 0, 1, 2, 3
  • 소수小數 : 0.XXX로 1보다 작은 수, 예) 0.123, 0.01%
  • 실수實數 : 정수整數 + 소수小數, 예) 123.456, 3.141592
  • 고정固定 소수점小數點 표현 : 예) 정수부 3자리 + 소수부 3자리 = 123.456
  • 부동浮動 소수점小數點 표현 : 예) 가수부 3자리 x 지수부 3자리 = 0.123×10¹²³
  • 가수假數 : 소수점 이하 부분 = 소수 ↔ 진수眞數·정수整數
  • 지수指數 : 우측 어깨 위에 붙어 거듭 제곱을 나타내는 수

숫자를 표현할 수 있는 공간(칸)이 6개라고 하자. 여기서 고정 소수점이란 소수점의 위치가 고정 되어 있음을 뜻한다. 소수점 위 3자리, 소수점 아래 3자리처럼 말이다. 부동 소수점이란 소수점 위치가 가변적이란 얘기다. 부동浮動float플로우트는 떠다님을 의미한다. 다른 말로 지수 형태 표현이라고 할 수 있다. 소수점의 위치는 지수指數가 결정하고, 수의 정밀도는 가수가 결정한다. 가수假數란 가짜 수란 의미인데 소수점 이하를 의미한다. 그러니까 소수인 거지.

컴퓨터 메모리를 너무 어렵게 생각하지 말자. 우리가 초등학교 때 사용하던 원고지처럼 바둑판 격자가 그려진 공책을 상상하면 된다. 각 칸에는 글자 하나 적을 수 있다. 숫자를 적을 공간에 한계가 있는 것은 당연하다. 컴퓨터 메모리도 그러하다. 한 바이트라고 하는 것을 알파벳 문자가 들어가는 자리라고 생각하라. 


예를 들면 분해능 1000의 저울이 있다고 하자. 1g단위로 1kg까지 측정하는 저울이 있고, 1kg단위로 1톤까지 측정하는 저울이 있다. 실제 저울은 보통 1/100 정밀도이다. 여기서 저울 눈금에 표시되는 숫자는 가수에 해당한다. 눈금 간격이 정밀도(분해능)를 나타낸다. 그 뒤의 단위(g/kg)는 지수에 해당한다. 이건 규모(크기)를 나타낸다. 이 정도 설명해도 이해 못 하면 국정원 댓글 용역들이거나 일베충이다.

그런데 기억 공간이란 것은 한계가 있다. 공간(칸수) 제약이 있는 숫자 표시를 할 때는 2가지 개념이 있다. 측정기나 컴퓨터 속의 수를 너무 어렵게 생각하지 말자. 중앙이 0이고 좌우가 ±30㎝인 자를 상상하자. 이 자의 최소 눈금은 1㎜이다. 그럼 이렇게 정리 할 수 있다.

  • 표시 범위 : ±300㎜ → 자의 크기
  • 최소 눈금 : ±1㎜ → 정밀도/분해능

범위는 얼마나 큰 수, 작은 수를 표현할 수 있느냐이고, 눈금은 얼마나 섬세하게 나누어 표현할 수 있느냐이다. 이런 숫자 표현을 컴퓨터에선 비트 나열로 어떻게 할까? 그게 궁금하다. 2진수와 10진수를 바꾸는 개념이 필요하다. 몇 개의 숫자는 기억하자.

  • 1바이트(08비트) : 256개 정수 표현
  • 2바이트(16비트) : 6만5536개 정수 표현
  • 4바이트(32비트) : 42억9496만7296개 정수 표현
  • 8바이트(64비트) : 184경4674조4073억7095만51616개 정수 표현


Visual Basic Macro에서 사용하는 데이터 형식


컴퓨터에서 하나의 데이터 표현에 사용하는 기억 공간은 현재 8바이트(64비트)까지이다. 1바이트(8비트)에서 시작해서 2배씩 증가하는 것이 전통이다. 주어진 바이트 공간이 같아도 내용을 어떻게 해석하느냐의 차이가 있어 Data Type(자료 종류)이라 부른다.

  • 1바이트 : byte(자연수)
  • 2바이트 : integer(정수), boolean(논리)
  • 4바이트 : long(정수), single(실수)
  • 8바이트 : longlong(정수), double(실수), currency(화폐), date(시간)


대부분 컴퓨터 언어에선 전통적인 숫자 표현이다. 정수의 경우는 이해하기 쉽다. 고로 실수를 어떻게 표현하는지 분석해 볼 것이다. single, double, date는 부동 소수이고, currency가 고정 소수이다. 기타 흥미로운 자료형도 있다.

  • 14바이트 : decimal(10진수)
  • 16바이트 : variant(가변적)


decimal은 10진수를 표현한 것이다. 이건 단독 사용이 안 되고 variant와 함께 사용해서 다른 수를 10진수 형식으로 바꾼다. variant는 여러 형태의 데이터를 다 표현할 수 있도록 넓힌 공간이라 가장 많은 바이트를 차지한다. 추가된 2바이트는 자료 형식에 대한 정보이다. 고로 10진수 표현이 어떠한지 분석해 볼 것이다.

기타 object(객체), longptr(포인터) 등은 메모리 주소(위치)와 데이터 구조를 나타내는 자연수로 사람이 직접 건드릴 일이 없다. 데이터 구조란 여러 종류의 자료형을 묶어서 한 덩어리로 취급할 때 필요한 것이다. 고로 위치/크기/종류를 모두 구분해야 한다. 주소의 바이트 크기도 시스템(CPU + O/S)에 따라 자동으로 바뀌니까 신경 쓸 일 없다. 이와 유사한 자료 형식이 있다.

  • string(고정) : 문자열 길이(약 6만까지)
  • string(가변) : 10바이트 + 문자열 길이(약 20억까지)
  • variant(문자열) : 22바이트 + 문자열 길이(약 20억까지)


길이가 가변적인 자료형의 대표적이고 전통적인 것이 문자열이다. 길이가 고정된 문자열은 보통 단어 목록(사전)을 표현할 때 사용한다. 최대 한계 길이(약 6만까지 가능)를 정해서 사용한다. 단어 길이가 6만(65536자)이면 한글 250자 원고 (10행x25자) 240 페이지 분량, 500자 원고 (25행x20자) 120 페이지 노트 정도 된다. 여하튼 최대 단어 길이를 정하고 미리 공간을 확보하는 것이다. 이게 말이 단어지 이 정도면 문서 하나 정도가 들어간다.

길이가 가변적인 것은 보통 문장(문단)을 표현할 때 사용한다. 메모리는 절약 되지만 구현이 복잡하다. 문자열은 바이트의 배열이 된다. 고로 문자열 변수는 이 배열의 주소(위치)를 가리키게 되면서 문자열 길이도 표현해야 한다. 고로 4바이트(약 20억)는 길이, 나머지 4바이트는 주소(위치)를 표현하는 것 같은데 남은 2바이트는 뭔지 모르겠으나 컴퓨터가 알아서 할 일이다.

데이터를 비트로 표현하는 방법을 분석하기 위해 사용할 프로그램이다.


2진 부동 소수점 형식 분석


10진수로 된 실수를 2진수로 바꾸는 것은 정확하지 않고, 계산도 복잡하다. 고로 가수, 지수, 부호 비트를 구분해서 분석하려면 대가리를 좀 굴려야 한다. 2진수는 m×2ⁿ 형태이고 m(가수), n(지수)는 부호가 있다. n과 m의 변화를 보기 위해서 다음과 같은 수를 저장해 본 후에 분석한다.


m
n
10진양수
10진음수
1
0
1
-1
1
1
2
-2
1
2
4
-4
1
3
8
-8
1
4
16
-16
1
5
32
-32
1
6
64
-64
1
7
128
-128
1
8
256
-256
1
9
512
-512
1
-1
0.5
-0.5
1
-2
0.25
-0.25
1
-3
0.125
-0.125
1
-4
0.0625
-0.0625
1
-5
0.03125
-0.03125
1
-6
0.015625
-0.015625
1
-7
0.0078125
-0.0078125
1
-8
0.00390625
-0.00390625
1
-9
0.001953125
-0.001953125
0.1
0
0.5
-0.5
0.11
0
0.75
-0.75
0.111
0
0.875
-0.875
0.1111
0
0.9375
-0.9375
0.11111
0
0.96875
-0.96875
0.111111
0
0.984375
-0.984375
0.1111111
0
0.9921875
-0.9921875
0.11111111
0
0.99609375
-0.99609375
11
0
3 -3
111
0
7 -7
1111
 0
15 -15
11111
0
31 -31
111111
0
63 -63
1111111
0
127 -127
11111111
0
255 -255


간단한 비교 분석을 통해 다음과 같은 결론에 도달한다. 첫 비트는 부호, 그 다음은 지수, 그 다음은 1이 생략된 가수이다. 바이트의 배치 순서는 CPU에 따라 다른데 PC에서 사용하는 인텔 CPU는 하위 바이트를 먼저 기록한다. 그래서 거꾸로 배치해야 사람이 읽기 편하다. 지수는 비트 1자리만 늘어도 2배로 커지는 효과가 있다. 가수는 비트가 2배로 늘어야 2배 정밀도가 된다.

  • 32비트 실수 최소 눈금 : ±1.401298E-45 (2진수이기 때문에 이렇다)
  • 64비트 실수 최소 눈금 : ±4.94065645841247E-324 (2진수이기 때문에 이렇다)

최소 값일 때는 비트 모양이 지수 = 0, 가수 = 000...0001 꼴이다.








날짜와 시간 표현은 64비트 부동 소수점 형식을 빌려 사용하고 있다. 초→분→시→일→월→년으로 1초 시간에 해당하는 소수를 계속 누적하는 형태이다. 1일은 정수 1에 해당한다. 고로 1일을 60초 * 60분 * 24시 = 86400초로 나누면 단위 시간 1초에 해당하는 소수를 구할 수 있다. 365일은 평년, 366일은 윤년이다.

  • 최소 눈금 : 1초 =  0.0000115740740740740... (740무한 반복)
  • 최대 범위 : 1900년 1월 0일 자정(0시0분0초) ~ 약 9999년(1만년)까지





10진 고정 소수점 형식 분석


돈 계산할 때 사용하는 Currency 고정 소수점 형식은 정수와 다를 것 없다. 본질적으로 정수이다. 정수처럼 첫 비트가 부호이다. 양수=0, 음수=1이며 음수는 정수처럼 보수를 취한다. 10진수로 소수점 아래 4자리까지 표현하고 싶다면 10000에 해당하는 수를 1로 보는 방식이다. 다시 말하면 1만 배 곱하여 저장, 계산한 후에 10진수로 결과 표시할 때만 소수 4자리 앞에 살짝 소수점을 찍어 준다. 고로 비트 패턴으로는 정수와 소수의 구분이 없고 그냥 1만배가 된 정수이다.

  • 최소눈금 : ±0.0001 (10진수라서 최소 눈금을 1로 표현 가능)
  • 최대범위 : 약 ±2의 63승 ÷ 10000






10진 부동 소수점 형식 분석


Decicmal의 형식을 읽을 수는 없었으나 10진법이라는 것도 Currency처럼 최소 눈금을 정하고 정수처럼 취급하는 방법으로 보인다. 왜냐하면 최소 눈금은 10진수로 표현했을 때만 1로 끝나기 때문이다. 또한 최대 범위를 보면 약 12바이트가 가수로 사용된다. 고로 남은 2바이트가 부호와 지수가 될 것이다. 헌데 지수가 있다는 말은 부동 소수란 말이다.

  • 최소 눈금 : ±0.0000000000000000000000000001, 10진수 29자리 표시
  • 최대 범위 : 약 ±2의 96승(12바이트), 10진수 29자리 표시

이 방법은 가수는 일반 정수처럼 취급하고, 지수는 10진수로 보는 방식이다. 계산은 내부적으로 어떤 방식으로 알아서 할 것이고, 화면에 표시할 때만 소수점 위치를 살짝 결정해 찍어주는 방법이다. 이렇게 하는 이유는 계산의 정확도를 위함이다. 10진 소수를 2진 소수로 정확히 바꿀 수는 없다. 허나 정수에선 가능하다. 고로 2진수 1을 10진수 최소 눈금으로 잡은 것이다.

이 방법으로도 곱하기 나누기에선 문제가 없다. 가수는 서로 곱하고 나누고, 지수는 서로 더하고 빼면 된다. 문제는 더하기 빼기이다. 지수가 큰 쪽으로 자리수를 맞추어야 하는데 가수는 2진 정수인데 지수는 10진수를 표시하니 복잡하다. 뭐 알아서 잘 했겠지.

이제 정수로 실수를 표현하는 원리를 알았으니 직접 구현할 수도 있을 것이다. 대충 이렇게 마무리한다.






독재정부가 하는 짓은 동서고금 똑같다.
전쟁터에서 하는 짓은 동서고금 똑같다.
한 나라의 역사만 제대로 알아도 나머지 나라 역사를 안다. 외국사 = 한국사
그러니 독재자 이승만, 박정희, 김일성, 한국 전쟁에 대한 환상을 깨자.
우리가 학교에서 배운 한국사는 1920년부터 일본이 가르친 일제 식민 사학이다.
근현대사 또한 친일파 세력 때문에 제대로 교육 받았다고 할 수 없다.

2016년 7월 3일 일요일

2의 존재 이유 : 컴퓨터에서 2진법을 쓰는 이유

우린 왜 10진법을 쓸까? 손가락이 10개라서.
우린 왜 12진법도 쓸까? 1년이 12달이라서.
우린 왜 360도를 쓸까? 1년이 365일이라서.


2진법은 언제부터 나왔을까?


  • 기하학에선 작도만으로 선과 각을 정확히 1/2할 수 있다. 1/3, 1/5 등은 불가.
  • 컴퓨터에선 0(없다/짧다)과 1(있다/길다)로 모든 수를 표현한다.
  • 수학에선 각도를 2π 라디안으로 π의 2배, 1/2배로 표현한다.
  • 동양 주역의 음양 8괘에선 2진수를 사용한다.



2가 좋은 점은?


  • 짝수와 홀수를 구분해 준다. 소수(프라임넘버)는 홀수 중에만 있다.
  • 뭐든지 반을 접어 정확히 1/2로 나누기 좋다. 자와 각도기 만들기에 좋음.
  • 어떤 수든 1/2눈금씩 접근하면 근사시키기 편하다. 측정에 편리함.
  • 10진수 대신 2, 4, 8진수를 사용했더라면 더 계산이 편했을 것이다.
  • 24비트 = 3비트(8진수) × 8자리, 16비트 = 4비트(16진수) × 4자리


2가 가장 기본적인 수이다. 석기 시대엔 수가 간단했다. 0(없다), 1(뭔가 있다), 2(수가 있다), 3(너무 많다). 3이란 수는 그냥 많다는 의미다. 동양에서 1만을 그냥 많다는 의미로 사용하는 것과 같다. (옛날엔 1만이 모인 것을 보기 힘들었으니까.) 석기 시대엔 3 이상 알 필요가 없었다. 3은 그냥 과한 수였다. 여하튼 여러 분야에서 2는 가장 과학적이고 편한 숫자이다. 


왜 5와 2는 10진법과 친할까? 


  • 10 = 2×5, 2로 나누기가 쉽다. 5는 이를 위한 보조 숫자에 불과.
  • 주판(돈)에선 5점(원) 1개와 1점(원) 4개로 0~9를 표현한다.




수의 종류는?

  1. 자연수 : 0, 1, 2, 3...
  2. 소수(素數:흰.수) : 2, 3, 5, 7, 11, 13...
  3. 정수(整數:가지런한.수) : 0, ±1, ±2, ±3...
  4. 소수(小數:작은.수) : ±0.123...
  5. 유리수(有理數:이치.있는.수)=분수 : 정수/정수
  6. 무리수(無理數:무리한.수) : 순환없는무한소수
  7. 실수 : 정수.소수
  8. 복소수 : 실수+허수





중고딩을 위한 수학 문제




위와 같은 소득 곡선을 보이는 섬나라 후진국이 있다. 이 섬나라에서 인당 교육비는 월평균20만원, 인당 생활비는 월평균 20만원이라고 하자. (꼴찌는 생활비와 교육비로 수입을 모두 지출한다.) 이 나라가 노인 복지와 교육 복지를 위해 세금을 걷으려 하는데 노인연금과 교육세의 세율은 얼마로 하면 되겠는가? 정률세이다.

정답 : 겨우 6.666~%

풀이 : 
총 교육비 + 노인연금 = 20만원 x 4인 = 월80만원
80만원/1200만원 = 0.0666~
월1200만원 버는 평균 월급쟁이는 약80만원만 내면 된다.

복지가 안 되는 이유는 오직 부자들이 세금 내기 싫어서다. 다른 이유는 전혀 없다.

야경 국가(방어적 평화 국가)란 것은 정부를 축소(최소한의 공무원, 경찰, 군인, 소방관을 유지)해서 부자가 세금을 가장 적게 내는 망하기 직전의 허약한 나라를 말한다. 아담 스미스는 산업혁명으로 부강해지는 영국을 보고 국부론(부자나라 만들기)을 썼는데 거기서 야경국가를 주장하니 참으로 이상하다. 영국이 야경국가였다면 영국은 세계에 식민지를 건설하지도 못 했을 것이다. 그 유명한 영국 함대는 서민들 세금으로 만들었냐?