부동소수점수는 작은 것 부터 연산하자

선요약: 부동소수점은 0에 멀어질 수록 정확도가 감소한다.  부동소수점수(Floating Point nuberm, 이하 FP)는 0에서 멀어질 수록 정확도가 감소한다. 매우 큰 FP에 매우 작은 FP를 더하면 위와 같이 수가 변화하지 않는 것을 볼 수 있다. 따라서 성능에 손해를 보더라도 매우 정확한 계산 결과를 원하는 경우 BigDecimal과 같은 특별한 클래스를 사용하는 것이 좋으며, 조금 신경쓰고 싶다면 절댓값이 […]

Bootstraping

수요일에 Programming Language 과목의 중간고사를 준비하면서 열심히 공부한 부트스트래핑이 시험에 나오지 않았기 때문에, 공부한 게 아까워 정리해서 올려봅니다. T-Diagram T-Diagram은 간단한 표기법입니다. Python으로 짜여진 Sort 프로그램, x86 위에서 돌아가는 Python 인터프리터, 그리고 x86 자체를 T-Diagram에서는 위와 같이 표기합니다. 인터프리터를 봤으니 컴파일러도 봐야겠죠? x86에서 C 코드를 x86 어셈블리로 바꿔주는 컴파일러는 위와 같이 표기합니다. x86에서 C 코드를 […]

Introduction to LLVM (3)

12. Static Single Assignment (SSA) Form 어디서 어떤 변수가 선언/사용되고 있는지 추척하는 것이 최적화의 주된 질문 중 하나. 위와 같은 상황에서는 if를 전후로 x의 역할이 바뀐다. Line 1의 x와 Line 7의 x는 전혀 연관이 없다. 이런 경우에는 두 변수를 구분해줘야 LLVM이 변수의 선언/사용을 추적하는 게 더 쉽지 않을까? 극단적인 상황을 가정해보자. 하나의 int 변수로 서로 […]

2018년 회고 및 2019년 계획

원래 이런 포스팅은 1월 1일에 해줘야 제맛이겠지만… 방 정리하고 계획짜고, 지난 학기 마무리겸 강의 정리도 하다보니 조금 늦어졌네요. 이 글에서는 2018년 회고를 순서없이 떠오르는 대로 나열해보고, 2019년 목표를 간단하게 정리해볼까 합니다. 2018년 회고 제 상반기를 갈아 넣었던 연구실 Lecture Management System 프로젝트가 가장 힘들었습니다. Vue.js 기반의 프론트엔드 담당 + PM까지 했었는데, 도대체 왜 내가 데이터베이스 […]

Introduction to LLVM (2)

6. LLVM Compiler System For Compiler Developer, 컴파일러를 만들기 위한 모듈화된, 재사용 가능한 컴포넌트들을 제공 -> 컴파일러 제작 시간, 비용 등을 절감 Intermediate Representation(IR)이 매우 잘 정의되어 있음. 깔끔한 구조, 고품질의 컴포넌트가 풍부. C, C++, Objective-C, Swift 등의 프로덕션 레벨 컴파일러의 기반. LLVM JIT, OpenMP RT, AMD OpenCL 등도 LLVM 기반. LLVM Debugger도 굉장히 좋음. […]