Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Talk:Uniform binary search

Page contents not supported in other languages.
Add topic
From Wikipedia, the free encyclopedia
Latest comment: 2 years ago by DoryL-36 in topic Implementation Safety

C implementation

[edit]
[redacted wrong code; see page history for details --Quuxplusone 06:35, 27 September 2006 (UTC)]Reply

Note that this code has a tough time with arrays that have an even number of elements ... I found you need to put 'sentinel' entries that are max-value at the end. I suspect the code wasn't translated quite right from the original MIX code in Dr. Knuth's book. —The preceding unsigned comment was added by Gnewf (talkcontribs) .

You are absolutely right. I can't believe I didn't test that code thoroughly before adding it. Apologies. A corrected and tested version has been posted now. (And with a main that shows the proper usage, unlike that cruft someone else put up without testing either. Hey, at least I don't make mistakes like "void main"! I make big complicated mistakes! :) --Quuxplusone 06:35, 27 September 2006 (UTC)Reply

Implementation Safety

[edit]

I believe there may be errors in the current implementation on the page, specifically relating to array bounds. I tested the code on OnlineGDB and it resulted in two out-of-bounds accesses:

  1. In the make_delta function, 0 is written to delta[4], but delta is only 4 entries wide (index goes up to 3)
  2. In the unisearch function, when searching for the number 0 the key == a[i] check accesses a[-1]

In the C implementation used by OnlineGDB neither of these caused crashes or issues (arrays are seemingly given a sort of buffer of zeroes), but I believe this is considered implementation-defined behavior and thus can not be relied upon on other C runtimes. DoryL-36 (talk) 02:17, 12 August 2023 (UTC)Reply