Almkvist-Giullera formula for pi: Difference between revisions

Content added Content deleted
m (domain check for ilog())
(→‎{{header|Common Lisp}}: Add implementation.)
Line 164: Line 164:
3.1415926535897932384626433832795028841971693993751058209749445923078164
3.1415926535897932384626433832795028841971693993751058209749445923078164
</pre>
</pre>

=={{header|Common Lisp}}==
{{libheader|computable-reals}}
{{trans|Raku}}
<lang lisp>(ql:quickload :computable-reals :silent t)
(use-package :computable-reals)
(setq *print-prec* 70)
(defparameter *iterations* 53)

; factorial using computable-reals multiplication op to keep precision
(defun !r (n)
(let ((p 1))
(loop for i from 2 to n doing (setq p (*r p i)))
p))

; the nth integer term
(defun integral (n)
(/r (*r 32 (!r (*r 6 n)) (+r (*r 532 n n) (*r 126 n) 9)) (*r 3 (expt-r (!r n) 6))))

; the nth term of the series
(defun a-g (n)
(/r (integral n) (expt-r 10 (+r (*r 6 n) 3))))

; the sum of the first n terms
(defun a-g-sigma (n)
(let ((s 0))
(loop for i from 0 to n doing (setq s (+r s (a-g i))))
s))

; the approximation to pi after n terms
(defun a-g-pi (n)
(sqrt-r (/r 1 (a-g-sigma n))))

(loop for i from 0 to 9 doing
(format t "~&~a. ~44d ~3d " i (integral i) (- 3 (* 6 (1+ i))))
(finish-output *standard-output*)
(print-r (a-g i) 50 nil))

(format t "~%~%Pi after ~a iterations: " *iterations*)
(print-r (a-g-pi *iterations*) *print-prec*)</lang>

{{Out}}
<pre>0. 96 -3 +0.09600000000000000000000000000000000000000000000000...
1. 5122560 -9 +0.00512256000000000000000000000000000000000000000000...
2. 190722470400 -15 +0.00019072247040000000000000000000000000000000000000...
3. 7574824857600000 -21 +0.00000757482485760000000000000000000000000000000000...
4. 312546150372456000000 -27 +0.00000031254615037245600000000000000000000000000000...
5. 13207874703225491420651520 -33 +0.00000001320787470322549142065152000000000000000000...
6. 567273919793089083292259942400 -39 +0.00000000056727391979308908329225994240000000000000...
7. 24650600248172987140112763715584000 -45 +0.00000000002465060024817298714011276371558400000000...
8. 1080657854354639453670407474439566400000 -51 +0.00000000000108065785435463945367040747443956640000...
9. 47701779391594966287470570490839978880000000 -57 +0.00000000000004770177939159496628747057049083997888...

Pi after 53 iterations:
+3.1415926535897932384626433832795028841971693993751058209749445923078164...
</pre>



=={{header|Erlang}}==
=={{header|Erlang}}==