Download code

From LiteratePrograms

Jump to: navigation, search

Back to Pi_with_Machin's_formula_(Lisp)

Download for Windows: single file, zip

Download for UNIX: single file, zip, tar.gz, tar.bz2

pi.lisp

 1 ; Copyright (c) 2010 the authors listed at the following URL, and/or
 2 ; the authors of referenced articles or incorporated external code:
 3 ; http://en.literateprograms.org/Pi_with_Machin's_formula_(Lisp)?action=history&offset=20060307031705
 4 ; 
 5 ; Permission is hereby granted, free of charge, to any person obtaining
 6 ; a copy of this software and associated documentation files (the
 7 ; "Software"), to deal in the Software without restriction, including
 8 ; without limitation the rights to use, copy, modify, merge, publish,
 9 ; distribute, sublicense, and/or sell copies of the Software, and to
10 ; permit persons to whom the Software is furnished to do so, subject to
11 ; the following conditions:
12 ; 
13 ; The above copyright notice and this permission notice shall be
14 ; included in all copies or substantial portions of the Software.
15 ; 
16 ; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 ; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 ; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19 ; IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20 ; CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21 ; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22 ; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 ; 
24 ; Retrieved from: http://en.literateprograms.org/Pi_with_Machin's_formula_(Lisp)?oldid=2756
25 
26 (defun arccot (x unity)
27   (let ((xpower (floor (/ unity x))))
28     (arccot-plus-helper (* x x) 1 xpower)))
29 
30 (defun arccot-plus-helper (xsq n xpower)
31   (let ((term (floor (/ xpower n))))
32     (if (= term 0)
33         0
34       (+ (arccot-minus-helper xsq (+ n 2) (floor (/ xpower xsq)))
35          term))))
36 
37 (defun arccot-minus-helper (xsq n xpower)
38   (let ((term (floor (/ xpower n))))
39     (if (= term 0)
40         0
41       (- (arccot-plus-helper xsq (+ n 2) (floor (/ xpower xsq)))
42          term))))
43 
44 
45 (defun pidigits (digits)
46     (let* ((unity (expt 10 (+ digits 10)))
47            (pi (* 4 (- (* 4 (arccot 5 unity)) (arccot 239 unity)))))
48       (floor (/ pi (expt 10 10)))))
49 


Views
Personal tools