quadratic_formula_solution_approx.sf 955 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #!/usr/bin/ruby
  2. # Approximation to the solution for x in:
  3. # a*x^2 + b*x + c = 0
  4. # Defined only in the following cases:
  5. # a > 0
  6. # c < 0
  7. func quadratic_formula_approx(x, y, z, r=300) {
  8. # say abs(((-y + sqrt(y*y - 4*x*z))/ (2*x)))
  9. var A = x.abs
  10. var B = y.abs
  11. var C = z.abs
  12. var B1 = (y > 0 ? -y : 0)
  13. var C1 = (z > 0 ? -z : 0)
  14. func a(n) is cached {
  15. return 0 if (n == 0)
  16. return 1 if (n == 1)
  17. (B*a(n-1) + A*a(n-2) + B1)/C + C1
  18. }
  19. func b(n) is cached {
  20. return 1 if (n == 0)
  21. return 0 if (n == 1)
  22. (B*b(n-1) + A*b(n-2) + B1)/C + C1
  23. }
  24. a(r) / b(r)
  25. }
  26. say quadratic_formula_approx(13, -42, -34) #=> 3.90117814740055779908605856794532743125765386019
  27. say quadratic_formula_approx(1, -1, -1) #=> 1.61803398874989484820458683436563811772030917981
  28. say quadratic_formula_approx(29, 5, -4) #=> 0.295057661853378981552427771067600924446979990392