전체 글 725

Python 3.10.1 릴리즈 출시

지난 2021년 12월 6일에 Python 3.10.1 이 출시되었다. 설치하자 마자 인터프리터 쉘로 간단히 테스트해 보았다. Python 3.10.1 (tags/v3.10.1:2cd268a, Dec 6 2021, 19:10:37) [MSC v.1929 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> print("Hello~") Hello~ >>> for i in range(11): ... print(2**i) ... 1 2 4 8 16 32 64 128 256 512 1024 >>> import math >>> math.factorial(10) 3628800 >>> math..

Lanczos 계수를 이용하여 Gamma 함수값 구하기

아래의 소스는 Coefficients for the Lanczos Approximation to the Gamma Function 의 것을 Microsoft Visual C/C++ 명령줄 컴파일러 cl 로 컴파일되도록 수정한 것이다. // Filename: test_gamma_lanczos.c // // Compile: cl test_gamma_lanczos.c /EHsc /utf-8 // Execute: test_gamma_lanczos #include #define _USE_MATH_DEFINES // for C #include #define LG_g 5.0 // Lanczos parameter "g" #define LG_N 6 // Range of coefficients i=[0..N] const ..

프로그래밍/C 2021.12.08

Boost Library를 이용하여 임의의 정밀도를 갖는 부동소수점수 계산하기

Boost Library 1.75.0 을 설치하고 Visual Studio 2019 의 명령행 컴파일러 cl 로 컴파일하였다. 컴파일하기 전에 미리 환경변수 BOOST_LIB_PATH 와 MPIR_LIB_PATH 를 각각 Boost Library 와 MPIR Library 가 있는 경로로 설정해 놓아야 한다. /* * Filename: CalculateAreaOfDiskWithBoosLibrary.cpp * * Purpose: Test floating point numbers of arbitrary precision. * * Compile: cl CalculateAreaOfDiskWithBoosLibrary.cpp /I%BOOST_LIB_PATH% /I%MPIR_LIB_PATH% /EHsc /utf-8 ..

프로그래밍/C++ 2021.03.29

new 키워드로 생성된 배열의 크기 변경하여 재할당하기

C 언어로 동적 메모리(dynamic memory)를 할당빋으려면 malloc() 함수나 calloc() 함수를 사용하고, 해제할 때는 free() 함수를 사용한다. C++ 언에서도 이를 사용해도 되지만 메모리 할당과 관리를 객체의 생성과 소멸 과정 중에 혹은 함수의 호출과 리턴의 과정 중에 프로그래머가 일일이 간섭하려면 귀찮기도 하고, 잠간의 실수로, 심각한 버그가 발생하여 치명적인 결함이 생길 수도 있다. C++ 언어에서는 배열의 메모리 할당과 해제를 C 언어 보다 좀 더 안전하고 편하게 해 주는 new 타입[] 과 delete[] 포인터변수 형태의 구문이 있다. 예를 들어, 부동소수점수 double 타입의 값을 10개 저장하는 공간을 할당받고 해제하는 구문의 예는 다음과 같다. double *my_..

프로그래밍/C++ 2021.02.24

MPFR 라이브러리를 이용하여 Gamma 함수값 계산하기

Visual Studio 2019 와 MSYS2 MinGW64 에서 테스트 된 소스입니다. 혹시 MinGW 에서 컴파일되지 않으면 $ packman -S mpfr 명령으로 mpfr 라이브러리를 설치하고 컴파일하면 된다. // Filename: calcGammaFn.c // // Compile: gcc -o calcGammaFn calcGammaFn.c -lmpfr -lgmp // Execute: ./calcGammaFn // Or // Compile: cl calcGammaFn.c /I. mpfr.lib // Execute: calcGammaFn // // Date: 2021.01.28 #include #include // for log(10) #include int main() { mpfr_t x; i..

프로그래밍/C 2021.01.28

utf8 인코딩을 이용한 다국어 hello world

C 언어 또는 C++ 언어에서는 문자열 인코딩을 처리할려면 무척 애을 먹는다. 반면에 Java 언어나 Python 언어에서는 문자열 인코딩 문제가 일치 감치 해결되어 있으므로 조금만 주의하면 별 어려움이 없다. 우선 간단한 Python 소스를 보자. # -- coding: utf=8 -*- greetings = [ "Hello~", # English "안녕하세요?", # Korean "んにちは。", # Japanese "您好!" # Chinesse ] for msg in greetings: print(msg) """ Output: Hello~ 안녕하세요? んにちは。 您好! """ 위의 소스를 저장할 때 utf8 인코딩으로 저장하면 실행 시에 터미널 환경의 문자셋 여부에 상관없이 정상적으로 잘 출력된다, ..

프로그래밍/C++ 2021.01.23

C++ 에서 C 함수를 불러 사용하기

일반적으로 C 언어로 작성된 함수를 C++ 언어에서 불러 사용하려면 extern "C" 라는 키워드가 필요하다. C 언어의 함수 정의를 ****.h 라는 헤더 파일에 기록해 두고 이 헤더 파일응 C++ 소스에서 포함(include)하려면 몇 가지 주의할 점이 있다. 우선 함수의 정의가 있는 C 소스와 C 언어용 헤더 파일을 보자. [(구현) 파일명: sayHello.c] ------------------------------------ #include void print_message(char *message) { printf("%s\n", message); } 위는 print_message(char *) 라는 함수 하나만 달랑 구현되어 있는 C 소스 파일이다. [(정의) 파일명: sayHello.h] ..

프로그래밍/C++ 2021.01.07

0.3 - 0.1 == 0.2 ?

C# 언어로 부동소수점수 계산할 때 실수할 수 있는 경우이다. 반복문의 탈출 조건에 저런 것을 이용하다 자칫하면 무한 반복의 늪에 빠질 수 있다. 금액 계산의 경우에 정확한 계산이 요구되기 때문에 float 타입이니 double 타입 보다는 decimal 타입을 사용하는것이 더 바람직할 것이다. 정확한 소수점수 계산을 위해 decimal 타입을 사용한 다음 C# 소스의 실행 결과를 보자. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CalcDecimalConsoleApp { class Program { static void M..

프로그래밍/C# 2020.12.14

PHP 8 정식 릴리즈 출시 (2020년 11월 26일)

최근에 PHP 8 릴리즈가 발표되었다. 변한 것은 여러가지 있지만, 사소한 변화 한 가지만 소개한다. PHP 8에서는 부동소수점수 나눗셈 함수 fdiv($a, $b) 가 추가되었다. 기존의 나눗셈 $a / $b 는 나누는 수 $b 가 0일 경우 에외가 발생하지만, IEEE 754 의 권고에 따라 0으로 나누는 경우 나누어지는 수가 양수냐 움수냐 0이냐에 따라 나눈 결과가 각각 +INF, -INF, NAN 로 된다. PHP 7,xx 까지에는 fmod($a, $b) 함수와 intdiv($a, $b) 함수가 이미 있었는데. 여기에 보조를 맞추어 fdiv($a, $b) 가 PHP 8에 새롭게 추가되었다고 한다. intdiv() 와 대비되는 이름 floatdiv() 으=로 할까도 고려해보았지만, fmod() 와 ..

프로그래밍/PHP 2020.12.03