continued_fraction.sf 629 B

12345678910111213141516171819202122232425262728293031
  1. #!/usr/bin/ruby
  2. func continued_fraction(a, b, n=100) {
  3. a.run + (n > 0 ? (b.run / continued_fraction(a, b, n-1)) : 0);
  4. }
  5. var f = Hash.new(
  6. "√2" => [
  7. do { var n = 0; { n++ ? 2 : 1 } },
  8. { 1 },
  9. ],
  10. "e" => [
  11. do { var n = 0; { n++ || 2 } },
  12. do { var n = 0; { n++ || 1 } },
  13. ],
  14. "π" => [
  15. do { var n = 0; { n++ ? 6 : 3 } },
  16. do { var n = 0; { (2*(n++) + 1)**2 } },
  17. 1_000,
  18. ],
  19. "π/2" => [
  20. do { var n = 0; { 1/(n++ || 1) } },
  21. { 1 },
  22. 1_000,
  23. ]
  24. );
  25. f.each { |k,v|
  26. printf("%3s ≈ %.9f\n", k, continued_fraction(v...));
  27. };