[plt-scheme] Re: HtDP 27.3.2 and 27.3.4
Grr..Sorry about that Jos --
The table was formatted when I sent it. If it matters, I'll redo it as
a google spreadsheet and post a link.
Thanks,
Dave
On Jul 4, 10:38 am, David Yrueta <dyru... at gmail.com> wrote:
> Thank you for the response, but I don't really get it....
>
> For (poly 3 4) I find arguments:
>
> I recast this as a table to see if I could figure out what you're driving at:
>
> Step left (f left) right (f right)
> mid (f mid) diff
> 1 3 -1 4 0
> 3.5 -.75 -1
> 2 3.5 -.75 4 0
> 3.75 -.4375 -.5
> 3 3.75 -.4375 4 0
> 3.875 -.234375 -.25
> 4 3.875 -.234375 4 0
> 3.9375 -.1209... -.125
> 5 3.9375 -.12109... 4 0
> 3.96875 -.0615... -.0625
> ...
>
> I can see that the value of 'right' remains constant, since with every
> call (<= (f mid) 0 (f right)) evaluates to true. But isn't that
> different from saying, as the exercise does, that with each midpoint
> (f mid) is computed twice?
>
> Thanks!
>
>
>
> On Sat, Jul 4, 2009 at 3:37 AM, Jos Koot<jos.k... at telefonica.net> wrote:
> > With TOLERANCE 1/100 I find that poly is called with the following
> > arguments:
> > 9/2
> > 6
> > 15/4
> > 9/2
> > 33/8
> > 9/2
> > 63/16
> > 33/8
> > 129/32
> > 33/8
> > 255/64
> > 129/32
> > 513/128
> > 129/32
> > 1023/256
> > 513/128
> > 2049/512
> > 513/128
>
> > For (poly 3 4) I find arguments:
> > 7/2
> > 4
> > 15/4
> > 4
> > 31/8
> > 4
> > 63/16
> > 4
> > 127/32
> > 4
> > 255/64
> > 4
> > 511/128
> > 4
> > Poly is called 7 times with the same argument 4.
> > Can you now find out why f is called with the same argument more than once
> > (how to avoid that?
> > Jos
>
> > ----- Original Message ----- From: "David Yrueta" <dyru... at gmail.com>
> > To: "PLT-Scheme Mailing List" <plt-sch... at list.cs.brown.edu>
> > Sent: Saturday, July 04, 2009 7:34 AM
> > Subject: [plt-scheme] HtDP 27.3.2 and 27.3.4
>
> >> Hi All --
>
> >> Questions for both exercises refer to the function "find-root" below:
>
> >> ;; find-root : (number -> number) number number -> number
> >> ;; to determine a number R such that f has a
> >> ;; root between R and (+ R TOLERANCE)
> >> ;;
> >> ;; ASSUMPTION: f is continuous and monotonic
> >> (define (find-root f left right)
> >> (cond
> >> [(<= (- right left) TOLERANCE) left]
> >> [else
> >> (local ((define mid (/ (+ left right) 2)))
> >> (cond
> >> [(<= (f mid) 0 (f right))
> >> (find-root f mid right)]
> >> [else
> >> (find-root f left mid)]))]))
>
> >> ;; poly : number -> number
> >> (define (poly x)
> >> (* (- x 2) (- x 4)))
>
> >> HtDP exercise 27.3.2:
>
> >> "Use poly from 27.3.1 to test find-root. Experiment with different
> >> values for TOLERANCE. Use the strategy of section 17.8 to formulate
> >> the tests as boolean-valued expressions."
>
> >> Are these tests meant to take place inside or outside the body of
> >> "find-root." In other words, are they conditional expressions inside
> >> "find-root"? If not, how are these tests different from a typical
> >> "check-expect?"
>
> >> (check-expect (find-root poly 3 6) 3.75)
>
> >> HtDP exercise 27.3.4
>
> >> "For every midpoint m, except for the last one, the function find-root
> >> needs to determine the value of (f m) twice. Validate this claim for
> >> one example with a hand-evaluation."
>
> >> For the life of me, I don't see (f m) computed twice for every
> >> midpoint. "Mid" is obviously computed twice, but I only see "(f mid)"
> >> computed once per call. Am I missing something totally obvious?
>
> >> Thanks!
> >> Dave Yrueta
> >> _________________________________________________
> >> For list-related administrative tasks:
> >> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
> _________________________________________________
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme