2010-07-23 3 views

답변

2

기본적으로 긴 나누기를 수행하고 직접 숫자를 계산하는 알고리즘을 구현해야합니다. 수백 자리수의 십진수를 저장할 수있는 원시 데이터 유형은 없습니다.

2

Common Lisp의 구현 인 CLISP를 사용할 수 있습니다. 확장으로서 설정 가능한 정밀도의 부동 소수점을 제공합니다. 참조 : http://clisp.cons.org/beta/impnotes/num-concepts.html#lfd

또한 Maxima와 Axiom과 같은 시스템이 Common Lisp 위에 실행됩니다. 이것들은 또한 고정밀의 실수로 계산할 수 있습니다.

Common Lisp 표준은이를 제공하지 않습니다.

+0

인기있는 또 다른 구현 : 여기 내 제안이다 데이브 길레스피의 '계산 Elisp에서 임의 정밀도 부동 소수점 구현 (심지어 bigints이없는 자체!). – Ken

1

(format nil "~,100F" x)이 원하는대로 구현 될 수 있습니다. 그러나 대부분이 첫 번째는 float로 변환 된 다음 정밀도를 잃는 숫자를 계산합니다.

나만의 프로그램을 작성하는 것은 그리 어렵지 않습니다. 아이디어는 소수점 앞뒤의 부분을 정수로 별도로 계산하는 것입니다.

(defun number->string-with-fixed-decimal-places (x width &optional stream) 
    "Print an approximation of <x> with <width> digits after the decimal point." 
    (multiple-value-bind (int dec) (truncate x) 
    (let ((dec-shifted (truncate (* (abs dec) (expt 10 width))))) 
     (format stream "~d.~v,vd" int width #\0 dec-shifted)))) 
관련 문제