continued_fraction.sf 883 B

1234567891011121314151617181920212223242526272829
  1. #!/usr/bin/ruby
  2. # Generic implementation of continued fractions.
  3. func continued_fraction(a, b, f, n = 1000, r = 1) {
  4. f(func (r) {
  5. r < n ? (a(r) / (b(r) + __FUNC__(r+1))) : 0
  6. }(r))
  7. }
  8. var params = Hash(
  9. "φ" => [ { 1 }, { 1 }, { 1 + _ } ],
  10. "√2" => [ { 1 }, { 2 }, { 1 + _ } ],
  11. "e" => [ { _ }, { _ }, { 1 + 1/_ } ],
  12. "π" => [ { (2*_ - 1)**2 }, { 6 }, { 3 + _ } ],
  13. "τ" => [ { _**2 }, { 2*_ + 1 }, { 8 / (1 + _) } ], # very fast convergence
  14. )
  15. for k in (params.keys.sort) {
  16. printf("%2s ≈ %s\n", k, continued_fraction(params{k}...))
  17. }
  18. __END__
  19. e ≈ 2.7182818284590452353602874713526624977572470937
  20. π ≈ 3.14159265383979292596359650286939597045138933078
  21. τ ≈ 6.28318530717958647692528676655900576839433879875
  22. φ ≈ 1.61803398874989484820458683436563811772030917981
  23. √2 ≈ 1.41421356237309504880168872420969807856967187538