aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Guillermo Albers Raviola <thomas@thomaslabs.org>2026-01-22 23:02:42 +0100
committerThomas Guillermo Albers Raviola <thomas@thomaslabs.org>2026-01-22 23:04:23 +0100
commitde978be143e9a78ccaa9b9e1ed6a8a7cf534d9eb (patch)
tree5fff417aeb06a893e4de56a094571318c820fb85
parent1ef25a125370b40b183fa37eb2d73b8c60c9794b (diff)
Add simpler method to calculate bbp formula
-rw-r--r--bbp.scm15
1 files changed, 15 insertions, 0 deletions
diff --git a/bbp.scm b/bbp.scm
index b391bd5..9865a35 100644
--- a/bbp.scm
+++ b/bbp.scm
@@ -60,3 +60,18 @@
(newline)))
(display-digits-of-pi 100)
+
+(define (digits-of-pi* n)
+ (define digits (make-vector n 0))
+ (define (term k)
+ (let ([8k (* 8 k)])
+ (/ (- (/ 4 (+ 8k 1)) (/ 2 (+ 8k 4)) (/ 1 (+ 8k 5)) (/ 1 (+ 8k 6)))
+ (expt 16 k))))
+ ;; sum n+1 terms
+ (define sum (let loop ([k 0] [s 0])
+ (if (> k n) s (loop (+ k 1) (+ s (term k))))))
+ (let ([den (denominator sum)])
+ (do ([i 0 (+ i 1)]
+ [num (numerator sum) (* 16 (mod num den))])
+ ((>= i n) digits)
+ (vector-set! digits i (div num den)))))