From cf374d43617ae5dcebe6c22df872ebfb32908da3 Mon Sep 17 00:00:00 2001 From: mehbark <terezi@pyrope.net> Date: Fri, 14 Mar 2025 10:44:03 -0400 Subject: [PATCH] init --- pi.scm | 7 +++++++ pi.sls | 21 +++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 pi.scm create mode 100644 pi.sls diff --git a/pi.scm b/pi.scm new file mode 100644 index 0000000..8e623ef --- /dev/null +++ b/pi.scm @@ -0,0 +1,7 @@ +(import (pi)) +(spigot + (lambda (n) + (write n) + ;; feels nicer to flush after every digit (it gets real slow) + ;; chez let's us omit the output port but not r6rs sad + (flush-output-port (current-output-port)))) diff --git a/pi.sls b/pi.sls new file mode 100644 index 0000000..7c84925 --- /dev/null +++ b/pi.sls @@ -0,0 +1,21 @@ +;; https://www.gavalas.dev/blog/spigot-algorithms-for-pi-in-python/ +(library (pi) + (export spigot) + (import (rnrs (6))) + (define (spigot yield) + (let loop ([q 1] [r 0] [t 1] [k 1] [n 3] [l 3]) + (if (< (- (+ (* 4 q) r) t) (* n t)) + (begin + (yield n) + (loop (* 10 q) + (* 10 (- r (* n t))) + t + k + (- (div (* 10 (+ (* 3 q) r)) t) (* 10 n)) + l)) + (loop (* q k) + (* (+ (* 2 q) r) l) + (* t l) + (+ k 1) + (div (+ (* q (+ (* 7 k) 2)) (* r l)) (* t l)) + (+ l 2))))))