2013/02 18

gcc 와 g++ 의 log 계산 오류

양의 정수를 이진법으로 표현할 때 자리수를 구하는 C 언어 함수를 두 가지로 구현해 보았다. 함수 int nbits(int) 는 주어진 정수를 직접 2로 나누기를 반복하면서 자리수를 구한 것이고, 함수 int bits(int) 는 밑이 2인 로그함수 lg(x) = log(x)/log(2) 를 이용하여 구한 것이다. 그런데 Cygwin 또는 Linux 에서 gcc 로 컴파일하여 실행하면 오루가 빌생한다. (참고로 gcc 의 버전은 4.5.3 이다.) MinGW 의 gcc 는 버전이 4.6.2 인데 마찬가지로 log 계산에 오류가 있다. Visual C, C#, Java, Python 으로는 2100000000 이하의 양의 정수에 대하여 그런 오류가 발생하지 않는다. // Filename: calcLG64...

프로그래밍/C 2013.02.25

Clojure 언어로 계산하는 30000! (팩토리얼) 계산하기

* 아주 간단한 재귀호출 팩토리얼 함수 구현 소스: facto-01.clj ;;; Filename: fact-01.clj ;;; ;;; (fact n) : a factorial function using a plain recursive call ;;; ;;; This gives rise an integer overflow while calculating 20!. ;;; ;;; Execute: clj fact-01.clj ;;; ;;; Date: 2013. 2. 11. ;;; Author: pkim ((AT)) scripts ((DOT)) pe ((DOT)) kr (defn fact [n] (if (< n 2) 1 (* n (fact (- n 1))) )) (printf "10! = %s\n" (fact ..

Clojure 스크립트 소스 실행하기

* JLine 다운로드: http://jline.sourceforge.net/downloads.html jline-1.0.jar 파일을 d:\clojure-1.4.0 폴더에 복사함 *일괄 파일 clj.bat 의 내용 :: 1. Change the constants to match your paths :: 2. Put this clj.bat file on your PATH :: :: Usage: :: :: clj # Starts REPL :: clj my_script.clj # Runs the script :: clj my_script.clj arg1 arg2 # Runs the script with arguments @echo off :: Change the following to match your p..

Clojure 설치하고 테스트하기

Clojure 는 Rich Hickey 씨가 만든 Lisp 계열의 함수형 언어로서 자바가상기계(JVM) 위에서의 동작을 목표로 하고 있다. (CLR과 자바스트크립트에서 동작하는 Clojure 는 각각 별도의 프로젝트로 개발되고 있다,) 다른 Lisp 아류와는 달리, Clojure 는 소스 코드를 데이터로 본다. Clojure 는 철저하게 값(value)은 수정 불가 값(immutable value) 만을 견지하고 ,특히 다중 쓰레드 환경에서 더 견고한 프로그램을 개발이 용이하도록 촉진한다. Clojure 홈페이지 위키피디아의 Clojure 설명 위키북의 Clojure Programming/Getting Started Clojure 언어 프로그래밍 (추천) Lisp 언와 Clojure 언어의 비교 (추천)..

함수형 언어 Scheme 의 소개와 설치

Scheme 홈페이지 CHICKEN Scheme 홈페이지 Wikipedia 에서 소개하는 Scheme Lisp 언어의 변종인 주요 후계자 언어로는 보통 Common Lisp 과 Scheme 두 가지가 꼽힌다. Scheme 언어는 1975년~1980년 기간에 MIT 인공지능 연구실에서 Guy L. Steels 와 Gerald 와 Jay Sussman 에 의해 개발되었으며, RnRS(Revised Report on the Algorithmic Language Scheme) 라는 이름으로 그 표준이 공개되어 왔다. (여기서 n은 숫자) R5RS는 1998년에 발표되었으며 가장 널리 쓰여진 Scheme 이며, R6RS 는 2007년 8월 27일에 발표되었고, R7RS 가 최근 2012년 12월 10일에 발표 되..

OCaml 언어, F# 언어. Haskell 언어로 각각 리스트 쉽게 생성하기 그리고 zipWith 을 이용한 행렬 곱셈

수학에서 집합을 표현하는 방법에는 열거형 표현법과 진술형 표현법으로 나뉘어진다. { 3, 7, 10, 14 } 는 열거형 표현이고, { y | y = n + 2n + [n/2] where n = 1, 2, 3, 4 } 는 진술형 표현이다. (단 여기서 [x] 는 가우스 기호) (참고로 아래의 구문에서 기호 ghci GHCi, version 7.4.2: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer-gmp ... linking ... done. Loading package base ... linking ... done. Prelude> [ x + 2*x +..

OCaml 언어로 평방근, 입방근, n제곱근 구하는 함수를 구현하고 테스트하기

음이 아닌 실수 A 의 평방근 sqrt(A) 를 구하는 Heron 의 방법: 반복함수 g(x) = (x + A/x) / 2 를 이용 실수 A 의 n제곱근 root(n, A) 를 구하는 Newton-Raphson 의 방법 반복함수 g(x) = ((n-1)*x + A/(x**(n - 1))) / n 를 이용 n = 2 인 경우에는 Newton-Raphson 의 방법이 Heron 의 방법과 동일하다. (참조. http://en.wikipedia.org/wiki/Newton's_method ) OCaml 언어에는 부동소수점수의 지수연산자 ** 가 있다. 하지만 차후 필요한 데가 있을 것 같아서 이와 유사한 n 제곱 함수와 n 제곱근 함수를 구현해 보았다. 지수가 정수인 거듭제곱을 계산하는 함수도 nPow, gP..

30000! 빨리 계산하기 with OCaml

* 꼬리 재귀호출과 패턴 매칭을 이용하여 구현한 팩토리얼과 피보나치 수열 계산 (* Filename: fact.ml Rapid factorial and fibonacci seq implementations by pattern matching and tail recursive call Execute: ocaml nums.cma fact.ml or Compile: ocamlc -o fact.exe nums.cma fact.ml Execute: fact Date: 2013. 2. 6. Author: pkim __AT__ scripts.pe.kr *) open Printf open Num let bignum x = num_of_int x ;; let to_string x = string_of_num x ;; l..