본문 바로가기

분류 전체보기23

round(1.555,2) 는 1.55이다? round() 함수를 시험하다가 사람 참 즐겁게 하는 결과를 만났다. (참고로 round()함수는 반올림을 해주는 python의 내장 함수다.) 다음을 보자. a = 1.2345 round(a,2) 1.23 round(a,3) 1.234 .....띠용? 아니 왜 1.235가 아니라 1.234일까? 반올림하면 1.235가 맞는데? 해서 검색해보니 나와 같은 짓을 한 외국인이 있었다. 결론은 이렇다. 원인은 floating point, 즉 부동 소수점이다. 컴퓨터의 아주 밑바닥까지 들어가면 값은 0과 1로 이루어져 있다. 즉, 2진수로 모든 값을 표현해야 한다. 그러니 위의 a 값이 컴퓨터에는 1.23449999999999999345234119999999........ 따위와 같은 수로 저장 된다는 것이다... 2019. 10. 19.
블록체인- 소프트 포크, 하드 포크 블록을 생성하다 보면 '충돌'이 발생하는 경우가 있다. A-B-C-D-E 이렇게 줄줄이 열차로 이어진 노드가 있다. 그런데 A와 E가 거의 동시에 블록을 생성하고 블록에 각자 내용을 기록해서 피어에 전송한다. 그러면 B는 A가 생성한 블록을 기록하고, D는 E가 생성한 노드를 기록할 것이다.(네트워크 상황 동일, 오류 없음 가정) 그리고 문제는 C다. C는 B가 전송한 블록체인과 D가 전송한 블록체인을 동시에 전달받는다. 이때 누구의 블록체인을 따를 것인가? 먼저, C는 둘 중 무거운 블록체 안을 따른다. '무겁다'라는 것은 블록이 더 길게 이어진 것, 더 많은 블록이 이어진 것을 따른다는 것이다. 한편, 이런 경우가 있다. A와 B가 있는데, A는 프로그램을 업데이트해서 과거에는 없던 새로운 규칙을 적.. 2019. 10. 18.
블록체인-해시 퍼즐, 작업증명 먼저 앞의 글에서 블록에 '기록'을 한다고 했는데, 이제 '누가'기록을 하는지 정해야 한다. 먼저 블록에 기록을 하려면 블록을 생성해야 한다. 이때 블록을 생성하는 작업은 어려워야 한다. 누구나 쉽게 블록을 생성한다면, (후에 좀 더 설명하겠지만)블록에 저장된 내용에 대한 신뢰도가 떨어지게 된다. 따라서 비트코인에서 택한 방법은 '해시 퍼즐'이라는 개념을 도입했다. '해시 퍼즐'이란 주어진 값보다 작은 값을 찾는 행위인데, 쉽게 생각하면 이런 것이다. 1~10까지 적혀 있는 공 중에서 10보다 작거나 같은 공을 찾을 확률은 100% 5보다 작거나 같은 공을 찾을 확률은 50% 1보다 작거나 같은 공을 찾을 확률은 10% 이다. 이처럼 매번 블록을 생성할 때마다 목표값이 주어지고, 각 개인은 특정한 식에 .. 2019. 10. 18.
블록체인-브로드캐스팅 브로드캐스팅 탈 중앙화 시스템에서 거래는 '브로드 캐스팅'을 통해 이루어진다. 중앙화 시스템(우리가 사용하는 은행을 예로들면)에서는 나의 거래 데이터를 중앙 서버에 전송한다. 이에 반해 탈 중앙화 시스템에서는 나의 거래 데이터를 나와 연결된 모든 노드(피어)에게 전송한다. 이렇게 탈 중앙화 시스템에서는 시스템에 참여하는 모든 노드가 서로 데이터를 전송한다. 이론상 모든 노드가 순서는 다르지만 모두 같은 데이터를 가지고 있어야 한다. 하지만 현실에서는 네트워크의 상황이나 네트워크 오류, 피어의 관계 등에 따라(데이터 전달 속도가 다르므로) 특정 시점에 모든 노드가 가지고 있는 데이터는 서로 상의할 수 있다. 이때, 데이터를 가지고 있다고 해당 데이터가 무조건 '기록'되는 것은 아니다. 먼저, '기록'이라는.. 2019. 10. 18.