polynomial_synthetic_division.sf 754 B

123456789101112131415161718192021222324252627282930313233343536
  1. #!/usr/bin/ruby
  2. #
  3. ## https://rosettacode.org/wiki/Polynomial_synthetic_division
  4. #
  5. func extended_synthetic_division(dividend, divisor) {
  6. var end = divisor.end
  7. var out = dividend.clone
  8. var normalizer = divisor[0]
  9. for i in ^(dividend.len - end) {
  10. out[i] /= normalizer
  11. var coef = -out[i]
  12. if (coef != 0) {
  13. for j in (1 .. end) {
  14. out[i+j] += divisor[j]*coef
  15. }
  16. }
  17. }
  18. var remainder = out.splice(-end)
  19. var quotient = out
  20. return(quotient, remainder)
  21. }
  22. var (n, d) = ([1, -12, 0, -42], [1, -3])
  23. var (q, r) = extended_synthetic_division(n, d)
  24. print(" %s / %s =" % (n, d))
  25. print(" %s remainder %s\n" % (q, r))
  26. assert_eq(q, [1, -9, -27])
  27. assert_eq(r, [-123])