Clarity vs. code reuse/generality
pdpi
pdpinheiro at gmail.com
Tue Jul 7 14:51:59 EDT 2009
On Jul 7, 7:31 pm, pdpi <pdpinhe... at gmail.com> wrote:
> On Jul 7, 7:06 pm, Paul Rubin <http://phr...@NOSPAM.invalid> wrote:
>
> > pdpi <pdpinhe... at gmail.com> writes:
> > > Personally, I think the code is an unreadable mess, but that's mostly
> > > because of all the micro optimizations, not the generality of it.
> > > Here's my unoptimized, but still equally generic, version:
>
> > That version doesn't use "sense" inside the binary search, i.e. it
> > relies on the function being monotonically increasing.
>
> You're right, make that:
>
> def _binary_search(lo, hi, func, target, epsilon):
> sense = cmp(func(hi), func(lo))
> if sense == 0:
> return None
> guess = (lo + hi) / 2.
> while abs(func(guess) - target) > epsilon:
> guess = (lo + hi) / 2.
> if sense * func(guess) > target:
> hi = guess
> elif sense * func(guess) < target:
> lo = guess
> elif lo == hi:
> return None
> return guess
>
> Seems I had a serious brain cramp while posting that...
Actually, scratch that.
def _binary_search(lo, hi, func, target, epsilon):
sense = cmp(func(hi), func(lo))
if sense == 0:
return None
guess = (lo + hi) / 2.
while abs(func(guess) - target) > epsilon:
guess = (lo + hi) / 2.
if sense * func(guess) > sense * target:
hi = guess
elif sense * func(guess) < sense * target:
lo = guess
elif lo == hi:
return None
return guess
More information about the Python-list
mailing list