참고 자료(*)

참고할 만한 서적과 자료 그리고 몇가지 팁들을 제공합니다.

C 프로그래밍

C 표준

ANSI C 는 미국 국립 표준 협회 3 에서 지정한 C 표준을 말합니다. 이는 C89와 동치입니다.

C89:

C99:

C 11:

C 표준 수학 라이브러리

위에 서술한 ISO C 표준에 따른 C 라이브러리를 서술합니다. 기초적인 수학 라이브러리와 연관 기능들을 소개합니다.

Text Encoding

ASCII 코드표 1

ASCII는 정보 교환을 위한 미국 표준 문자표를 의미합니다 2. 이 코드표는 7-bit 크기의 숫자로 이루어져 있으며, 0-127까지의 숫자에 표기와 제어를 위한 문자가 할당되어 있습니다.

\[b_7 b_6 b_5 b_4 b_3 b_2 b_1 = \text{print or control character}\]

0-31, 127에 제어 문자가 할당되어 있고 나머지는 출력 문자가 할당되어 있습니다.

ASCII 표는 1963년도 처음 표준안이 발표된 이후로 몇몇 개정이 있어왔습니다. 하지만, 1967년도 개정판이 가장 일반적으로 많이 쓰입니다. 다음은 1963, 1965, 1967년도 발표된 ASCII 표입니다.

DE 10진수, HEX: 16진수, OCT: 8진수, CHAR: 문자

1965년도 개정에서는 알파벳 소문자들이 추가되었고, 일부 문자들의 위치와 제어 문자들의 이름이 바뀌었습니다.

0-31, 127에 할당된 제어 문자들은 프린터 같은 기기를 제어하거나 자기 테이프와 같은 저장 장치에서 값을 읽어올 때 구분을 위한 메타 정보 제공을 위함입니다. 1963년도 버전과 이후 개정의 차이는 이러한 제어 문자들의 이름들이 통신과 파일 입출력, 교환등을 위한 이름으로 좀 더 직관적이게 바뀌었다는 점입니다.

표 4 ASCII 제어 문자

Control CHAR

설명

NUM

NUM은 NUM입니다.

확장된 ASCII는 1bit가 추가 된 8bit 기반의 코드로 128-255 숫자 범위를 추가로 가지며, 라틴 계열 문자에 대한 지원과 추가적인 선 기호, 수학 기호 등을 포함합니다.

UTF

UTF는 Unicode Transformation Format의 약자로 Unicode의 매핑 방식중 하나입니다.

UCS

UCS는 Universal Character Set의 약자로 Unicode의 도다른 매핑 방식입니다.

서적과 문헌

시중에 다양한 C 입문, 학습서들이 나와있지만 표준적으로 쓰이는 C 서적은 두 가지가 있습니다.

  • Kernighan, B.W. & Ritchie, D.M., The C Programming Language, 2nd ANSI, Pearson Educación, 1988, isbn:9789688802052.

    Denis Ritchie와 Brian Kernighan이 작성한 책으로 ANSI C 표준을 기반으로한 책입니다. 이 라이브러리 내에서 쓰이는 표준이 ANSI C를 기반하므로 표준을 참고하기에 충분합니다. Denis Ritchie는 C 언어를 설계하고 개발한 사람이기도 합니다 4 .

    몇가지 주의할 점은 이 책의 예제 프로그램 코드 스타일 중 일부는 현재 프로그래밍에서 사용하기에 적절치 않습니다. C에 대해 참고하되 코드의 스타일까지 따라할 필요는 없습니다. 현대적인 프로그래밍 규약과 스타일은 다른 서적들이 더 좋은 자료들을 제공해 줄 수 있습니다.

  • King, K.N., C Programming: A Modern Approach. 2nd, W.W. Norton, 2008, isbn:9780393979503.

    K.N.King 의 저서로 C99 표준을 따릅니다. 실제 우리가 배우는 많은 편리한 C의 기능들은 ANSI C 이후 C99에서 도입된 기능들이 많습니다. TCPL이 좋은 책이고 C를 공부할 때 한번은 참고해 봐야할 책이지만 현대적인 코딩 규약들과 프로그래밍 방법들에 관한 내용은 이 책이 더 좋은 정보를 제공해 줄 것입니다.

  • GNU 표준 코딩 규약

    Richard Stallman과 몇몇 GNU 프로젝트의 참여자들은 관리, 참여하는 GNU 프로젝트의 일관성, 유지 보수성 그리고 설치 용의성의 확보를 위해 GNU 프로젝트에 관한 코딩 규약을 만들었습니다. GNU 프로젝트가 C를 통해 개발되는 대규모 오픈소스 프로젝트인 만큼 C의 개발 과정에서 사용가능한 여러 유용한 정보들을 담고 있습니다.

수학, 과학

참고 문헌으로 사용 가능한 몇몇 수학과 과학 문헌을 소개합니다. 자유 이용 저작물이거나 GDPL 등과 같은 자유 문서 허가서에 속하는 문서들은 공식 홈페이지거나 고품질의 디지털 문서 베포 사이트를 함께 기술합니다.

경고

별도의 서술이 없는 이상 디지털 문서가 자유 이용 저작물인 경우는 많지 않습니다. 아래 문헌의 디지털 판본을 복사, 베포, 수정할 때는 항상 공식 홈페이지의 저작권 문항을 주의 깊게 읽어야합니다. 인용하는 경우라도 표절과 적절한 형식을 따라야합니다. 일반 출판본은 자명하므로 언급하지 않겠습니다.

  • Abramwotiz & Stegun

    • Abramowitz, M., & Stegun, I.A.: Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables. US Government Printing Office, Washington, 10th printing, with corrections (December 1972)

    수학 참고 문헌으로 본 라이브러리에서 Abramwotiz & Stegun을 표준으로 사용하고 있습니다. 해당 문헌은 수학계에서 자명한 표준 문헌이고 자유 이용 저작물로 사용가능한 서적이지만, 새로운 갱신이 중단되었습니다. 1964년도에 NBS 5 에서 처음 출판된 이레로 1972년도에 마지막 “10th printing, December 1972, with corrections” 판이 출판되었고 더 이상 갱신되지 않고 있습니다.

    자유 이용 저작물이므로 자유롭게 재출판, 변형등이 가능하고 접근도 가능합니다. 일반적으로 대학 도서관에서 찾을 수 있습니다. 온라인에서 html 버전으로 서적의 출판본을 볼 수도 있습니다. Colin B. Macdonald 박사의 홈페이지 에서 제공합니다.

    온라인에 풀려있는 대부분의 PDF는 뒤틀리거나 잘린 스캔본이 대다수입니다. 실제 국내에서 구입가능한 재 출간서도 이러한 스캔본에 기반해 만들어진 경우가 있습니다. 2012년도 버밍엄(Birmingham) 대학의 Alan P. Sexton 박사는 A Resource for Scientific Document Analysis 6 란 프로젝트로 Abramwotiz & Stegun의 고품질 스캔본을 만들어 베포했습니다. 해당 프로젝트에서는 600dpi 이상의 고품질 스캔과 몇가지 이미지 처리를 사용해 참고에 유용한 품질의 디지털 문서로 사용할 수 있습니다.

  • DLMF

    Abramwotiz & Stegun를 대체하기 위해 NIST 7 에서 DLMF 프로젝트를 시작했습니다. 이 프로젝트는 Dgitial Library of Mathematical Functions 의 약자로 수학 함수들에 대한 참고 문헌을 핸드북 형태의 디지털 문서로 제공함을 목적으로 합니다. 해당 문헌은 A&S의 마지막 출간 이후 출판된 여러 새로운 함수와, 기존 함수들의 새 성질들을 포함하고 있으며 지속적으로 갱신되고 있습니다. 각 단원은 해당 함수들의 구현 알고리즘에 관한 논문을 포함하고 있으며, Software 단원에서 문서내 함수들의 구현체들에 대한 정보도 제공합니다. GSL 또한 이 책에 올라가 있습니다. Cambridge University Press 에서 2010년도에 출판된 서적 또한 판매하고 있습니다. 출판본은 NIST Handbook of Mathematical Functions 으로 명명되어 있습니다.

  • Wolfram Math World

    Wolfram Math World 는 Wolfram Research, Inc. 에서 Eric Weisstein의 프로젝트를 후원해 만들어진 온라인 수학 참고 문헌입니다. The CRC Encyclopedia of Mathematics 란 이름으로 CRC 에서 2009년도에 출판한 서적이 있습니다.

  • NIST Standard Reference Data

    NIST에서 운영하는 사이트로 과학 분야의 인용, 참고로 쓰일 수 있는 표준 데이터들을 연구, 생성, 베포합니다. 최신 물리 상수나 재료의 특성값이 필요한 경우 유용하게 사용할 수 있습니다.

과학 계산 프로그램과 라이브러리

GSL은 수치 해석을 위한 C 라이브러리입니다. 이 라이브러리를 사용해 다양한 수학 기능들을 C에서 사용할 수 있습니다. 하지만 GSL 외에도 과학 계산을 위한 많은 라이브러리와 소프트웨어들이 존재합니다. 이 단락에서는 과학 계산 분야에서 사용할 수 있는 C 라이브러리들과 관련 소프트웨어들을 간단하게 서술하고자 합니다.

GSL의 확장 기능인 라이브러리들은 별도로 GSL Extension 으로 표기합니다.

라이브러리

  • GLPK

    GNU Linear Programming Kit의 약자입니다. 선형 프로그래밍을 위한 여러 기능들을 제공합니다.

  • NLopt

    Nonlinear optimization을 위한 라이브러리입니다. 여러가지 최적화 방법들을 적은 인터페이스로 사용할 수 있는 기능을 제공하며, C, C++, Fortran, Matlab, GNU Octave, Python, GNU Cuile, Juliaa, R, Lia, OCaml 그리고 Rust에 대한 api를 지원합니다.

  • FFTW

    Fastest Fourier Transform in the West의 약자로 Fast Fourier Transform 기능을 구현한 라이브러리입니다. GSL 내부 구현체와의 차이점은 GSL 구현체에서 제공하는 함수가 처리할 수 있는 크기 이상의 대규모 데이터들에 대해 고속 푸리에 변환을 수행할 수 있다는 점입니다.

  • GMP

    GNU Multiple Precision의 약자입니다. 전체 이름은 The GNU Multiple Precision Arithmetic Library 정밀한 수학 계산을 할 때 많은 경우 double, float 자료형에서 유효 숫자의 한계가 생깁니다. GMPAL는 이러한 고정밀 대수 연산을 위한 라이브러리로 메모리의 제한을 무시한다면 정밀도의 한계 없이 계산을 할 수 있습니다. GMPAL 라이브러리의 주된 활용 분야는 암호, 인터넷 보안, 대수학과 계산 대수학 등이 있습니다

  • MPFR

    MPFR은 GMP에 기반한 수학 계산 라이브러리로 다중 정밀도의 부동 소수점 계산 기능과 몇몇 특수 함수들의 구현체를 제공하고 있습니다. 전체 이름은 The GNU MPFR Library 입니다.

  • SAM

    다중 정밀도의 이산 확률 대수 연산을 구현한 C/C++ 라이브러리입니다. MPFR 라이브러리에 기반해 있습니다. 관련 이론은 다음 논문에 기반해 있습니다.

      1. Graillat, F. Jézéquel, S. Wang, Y. Zhu, Stochastic Arithmetic in Multiprecision, Mathematics in Computer Science, 5(4), pages 359-375, 2011.

  • MPC

    MPC는 MPFR과 같은 목적으로 만들어진 라이브러리입니다. MPFR에서 다중 정밀도의 실수 구현체를 제공한다면 MPC에서는 다중 정밀도의 복소수 구현체와 관련 함수들을 제공합니다. 전체 이름은 GNU MPC 입니다.

  • Libmatheval

    심볼릭 연산을 위한 C, Fortran 라이브러리 입니다.

  • Arb

    Ball 대수를 이용한 고 정밀도를 지원하는 수학 함수 구현체들의 모음입니다. GSL 만큼이나 다양한 수학 구현체들을 지원하면 복소수 구현체들도 대부분 포함하고 있습니다. Ball 대수는 다음의 논문을 참고 할 수 있습니다.

    • Joris van der Hoeven. Ball arithmetic. 2009. ⟨hal-00432152v3⟩

  • FLINT

    FLINT는 Fast Library for Number Theory의 약자로 정수론 분야의 여러 구현체들을 제공합니다. 다중 정밀도의 정수와 유리수, 정수의 \(n\) 모듈러 연산 유한 체, p-진수 등의 기능들을 제공하고 있습니다.

CPU 의존 라이브러리

GSL 설치 단원에서 ICC와 AOCC를 언급했습니다. Intel과 AMD에서는 각자 CPU 플랫폼에서 더 높은 성능과 정확도를 가지는 수학 라이브러리를 제공합니다.

GSL Extension

이 단락의 프로그램들은 GNU 공식 홈페이지의 Extensions 목록에 기재되어 있습니다. 그중 상당수의 프로그램들이 폐업한 Network Theory Ltd 출판사의 서버에 보관되어 있어 현재 아카이브 서버에 페이지만 남아있습니다. 아래 목록은 현재 사용가능한 소프트웨어 목록입니다.

  • Tensor

    다차원 배열 표현과 처리를 위한 텐서(Tensor) 라이브러리입니다.

기타

  • GTK+

    Gimp의 그래픽 인터페이스를 위해 시작된 그래픽 라이브러리로 본격적인 소프트웨어의 GUI를 만드는 데 유용하며, 이를 이용해 사용자 정의 플롯 라이브러리를 짤 수도 있습니다.

소프트웨어

  • GNU Units

    각기 다른 측정계 (ISO MK, Internationa, Imperial yard&pound ..)로 표현된 값들을 다른 측정계로 변환해주는 프로그램입니다.

  • Gnuplot

    오픈소스 그래픽 소프트웨어입니다. C api를 제공해 C에서 여러 그래프와 3D 플롯을 그리는 데 사용할 수 있습니다.

  • GNU Octave

    수치 해석을 위한 고수준의 과학 계산 언어이자 소프트웨어입니다. 자체 언어가 있지만, C, C++, FOTRAN, Python 등으로 쓰인 모듈을 불러오거나 C++ 등에서 Octave 함수를 사용할 수도 있습니다. C는 C++ 함수를 호출하는 형태로 사용 가능합니다.

  • HDF5

    HDF5는 대용량 데이터 처리를 위한 계층적 파일 형식입니다. 개발 집단인 HDF5 Group에서 공식적으로 C, FOTRANm C++, Java, Python 에 대한 api를 제공합니다. 막대한 데이터를 다루고자 할때, 이러한 전문 파일 형식의 사용은 크게 유용합니다.

  • Mathematica

    기호 계산을 위한 프로그램 중 가장 광범위 하게 쓰이는 소프트웨어입니다. 많은 자연과학, 공학자들의 사용으로 몇몇 전공서들은 신규 개정판에서 Wolfram Language를 이용하는 문제들을 추가하거나 서적의 수학 표기를 Wolfram Math World 와 Mathmatica에서 사용가능한 형태로 바뀌어 가고 있기도 합니다 8 .

    근레, Wolfram Inc는 개인 연구가와 프로그래머들을 위해 Wolfram Engine 을 무료로 공개했습니다. 해당 엔진은 Mathematica 및 관련 제품들의 핵심 엔진으로 다양한 Wolfram 사의 제공 서비스를 이용할 수 있습니다. Wolfram 사의 핵심 기능은 기호 계산 소프트웨어이나 수치적 해석 분야의 기능 또한 풍부하게 제공하고 있습니다. C를 위한 api를 제공하기도 하므로 다른 C 라이브러리에 없는 특정 함수의 기능을 C로 구현하기 전에, 검증용으로 사용해 볼 수도 있습니다. C-api는 Wolfram Language & System Document Center의 C/C++ Language Interface 문서를 참고할 수 있습니다. Wolfram 엔진을 서버에서 설치해 사용하는 방법은 Wolfram Language on Research Server 를 참고할 수 있습니다.

  • PHOEBE

    천체물리에서 식 현상 계산을 위한 모델링 소프트웨어 패키지 입니다.

    NASA의 지원을 받고 있습니다.

GSL 지원 HPC 서비스

HPC Service on University

상용

각주

1

Gorn, S., Bemer, R. W., & Green, J. (1963). American standard code for information interchange. Communications of the ACM, 6(8), 422-426.

2

American Standard Code for Information Interchange, ASCII

3

Americal National Standards Institute, ANSI

4

K&R이나 TCPL(The C Programming Language)로 축약해 부르기도 합니다. 간혹 K&R이 2nd 판이 아닌 1st 판본을 의미하는 경우도 있으니 조심해야합니다.

5

National Bureau of Standards

6

Sexton, A. P. (2012). Abramowitz and Stegun - A Resource for Mathematical Document Analysis. Intelligent Computer Mathematics, 159-168. doi:10.1007/978-3-642-31374-5_11

7

National Institute of Standards and Technology

8

대표적인 예시가 Griffith, Introduction to Quantum Mechanics 3rd edition 입니다. 해당 서적은 2nd 판본의 수식들이 대거 개편되었고 Wolfram language 를 사용한 문제들이 추가되었습니다.