I V wrote:
On Fri, 10 Jul 2009 16:27:12 -0400, Terry Reedy wrote:
a bug, bug a limitation due to using limited-range numbers. If one uses
residue classes instead of integers, and makes no adjustment, I consider
it wrong to blame Bentley.

But it was Bentley himself who used the C int type, so it hardly seems unreasonable to blame him.

The original program that he verified was in pseudocode equivalent to the following (not tested) Python. The odd spec is due to Bentley using 1-based arrays. From the 1986 book Programming Pearls

def binsearch(x, t):
   "If t is in sorted x[1:n], return its index; otherwise 0"
   #
   L,U = 1, len(x)-1
   while True:
      if L > U: return 0
      m = (L+U)/2
      if   x[m] <  t: L = m+1
      elif x[m] == t: return m
      elif x[m] >  t: U = m-1

He then translated into an unspecified dialect of BASIC, but it is consistent with Microsoft GW-BASIC. If so, L and U were float variables, while the largest possible array size for x was 32767. So as near as I can tell with that dialect, there was no possible problem with L+U overflowing or wrapping. Other dialects, I am not sure.

So I revise my statement to "I consider it wrong to blame the Bentley that wrote the original program" ;-).

If he later translated to C and fell into the residue class trap, then that reinforces my contention that using residue classes as ints is error prone.

Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to