{require lib_BN} {def genpi {def genpi.loop {lambda {:n :pi :q :r :t :i :z} {if {> :z :n} then :pi else {let { {:n :n} {:pi :pi} {:q :q} {:r :r} {:t :t} {:i :i} {:z :z} {:digit {BN./ {BN.+ {BN.* {BN.- {BN.* :i 27} 12} :q} {BN.* :r 5} } {BN.* :t 5} } } {:u {BN.* {BN.+ {BN.* :i 3} 1} {BN.* 3 {BN.+ {BN.* :i 3} 2} } } } } {genpi.loop :n {BN.+ :pi :digit} {BN.* {BN.* :q 1} {BN.* :i {BN.- {BN.* :i 2} 1} }} {BN.* {BN.* :u 1} {BN.+ {BN.* :q {BN.- {BN.* :i 5} 2} } {BN.- :r {BN.* :t :digit} }}} {BN.* :t :u} {BN.+ :i 1} {+ :z 1}} }}}} {lambda {:n} {genpi.loop :n # 1 180 60 2 0} }} -> genpi We can generate π with 72 digits in about 500ms. {BN.DEC 72} -> 72 digits {genpi 60} -> 3.141592653589793238462643383279502884197169399375105820974944592307816406