Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Spare some change?

Name: Anonymous 2012-12-15 18:39

so, I am trying to write a change-counting program in scheme for some practice (I'm new to programming). Here is what I have:



 define (change-iter change quarter dime nickel penny)
  (cond ((< change 1.00)
          (change-iter (- change 0.25) (+ quarter 1) dime nickel penny))
         ((< change .25)
          (change-iter (- change 0.10) quarter (+ dime 1) nickel penny))
         ((< change .10)
          (change-iter (- change 0.05) quarter dime (+ nickel 1) penny))
         ((< change 0.5)
          (change-iter (- change 0.01) quarter dime nickel (+ penny 1)))
         ((= change 0)
          (display quarter)
          (newline)
          (display dime)
          (newline)
          (display nickel)
          (newline)
          (display penny)
          (newline))))

(define (change-counter change)
  (change-iter change 0 0 0 0))


it doesn't display the coins at the end.  What am I doing wrong?

Name: Anonymous 2012-12-18 13:36

>>14
It's a floating point error, Here's what happens to change during (change-counter 0.89)

0.89 -> 0.64 -> 0.39 -> 0.14 -> 0.04000000000000001 -> 0.030000000000000006 -> 0.020000000000000004 -> 0.010000000000000004 ->  3.469446951953614e-018 -> -0.0099999999999999970

This is a good lesson not to trust exact testing on floating point variables that undergo multiple calculations. You have to have tolerance. Change change units to mean a penny and you will have your exact answer.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List