Computer Old Farts Forum
 help / color / mirror / Atom feed
* [COFF] Re: [TUHS] Maximum Array Sizes in 16 bit C
@ 2024-09-21 14:37 Douglas McIlroy
  0 siblings, 0 replies; 4+ messages in thread
From: Douglas McIlroy @ 2024-09-21 14:37 UTC (permalink / raw)
  To: COFF, Dan Cross

[-- Attachment #1: Type: text/plain, Size: 366 bytes --]

Mea culpa.

I thought I could offer a simple example, but my binomial-coefficient
program is wrong, and loses its force when corrected. For a convincing
example, see the program in
    https://digitalcommons.dartmouth.edu/cs_tr/385/
Unfortunately you have to read a couple of pages of explanation to see what
this program is up to. It's a fun problem, though.

Doug

[-- Attachment #2: Type: text/html, Size: 578 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [COFF] Re: [TUHS] Maximum Array Sizes in 16 bit C
  2024-09-21  0:22 Douglas McIlroy
@ 2024-09-24 16:44 ` Dan Cross
  0 siblings, 0 replies; 4+ messages in thread
From: Dan Cross @ 2024-09-24 16:44 UTC (permalink / raw)
  To: Douglas McIlroy; +Cc: COFF

On Fri, Sep 20, 2024 at 8:22 PM Douglas McIlroy
<douglas.mcilroy@dartmouth.edu> wrote:
> Moved to Coff, because it's about programming style, not history.

Heh, I had deliberately removed the list in my response to you, but
it's not too embarrassing to have this redirected back to COFF. :-)

> > Perhaps I'm missing something? Clever arithmetic in the index
> > calculation aside, this is semantically different than using an actual
> > negative integer to index into an array? Moreover, if the intent is to
> > start the sequence with 0, why set `fib(0)` to 1? How is this
> > substantially different from the usual way of writing this:
>
> I said the Fibonacci example was silly. Maybe you'll be more convinced by the binomial-coefficient program below.
> [snip]

The caveat sent later notwithstanding, I agree that I was overly
fixated on the Fibonacci example in my response and this better
illustrates the motivation for the technique.

Regardless, I feel like we're somewhat speaking at cross-purposes. In
particular, this uses macros to introduce a more pleasant syntax, but
at the language level, the index into the underlying array is always
non-negative and within the array's defined bounds. This is
qualitatively and quantitatively different from using an actual
negative value in the actual indexing operation.

        - Dan C.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [COFF] Re: [TUHS] Maximum Array Sizes in 16 bit C
@ 2024-09-23 20:59 Douglas McIlroy
  0 siblings, 0 replies; 4+ messages in thread
From: Douglas McIlroy @ 2024-09-23 20:59 UTC (permalink / raw)
  To: COFF

[-- Attachment #1: Type: text/plain, Size: 494 bytes --]

A summary of a couple of longer posts.

Ralph Corderoy and I used different C syntax than to access an MxN array A,
whose subscripts begin at M0 and N0 in the respective dimensions. Here's a
somewhat simplified version of both. In our examples, M0 and M0 were
negative.

Mine:
int base[M][N];
#define A(i,j) base[i-M0][j-N0]

Ralph's
int base[M][N];
int (*A)[N] = (int(*)[N])&base[-M0][-N0];

In my scheme element references must be written A(i,j). Ralph retains C
array syntax, A[i][j].

Doug

[-- Attachment #2: Type: text/html, Size: 755 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [COFF] Re: [TUHS] Maximum Array Sizes in 16 bit C
@ 2024-09-21  0:22 Douglas McIlroy
  2024-09-24 16:44 ` Dan Cross
  0 siblings, 1 reply; 4+ messages in thread
From: Douglas McIlroy @ 2024-09-21  0:22 UTC (permalink / raw)
  To: COFF, Dan Cross

[-- Attachment #1: Type: text/plain, Size: 1570 bytes --]

Moved to Coff, because it's about programming style, not history.

> Perhaps I'm missing something? Clever arithmetic in the index
> calculation aside, this is semantically different than using an actual
> negative integer to index into an array? Moreover, if the intent is to
> start the sequence with 0, why set `fib(0)` to 1? How is this
> substantially different from the usual way of writing this:

I said the Fibonacci example was silly. Maybe you'll be more convinced by
the binomial-coefficient program below.

The array of interest is fib. base is simply scaffolding and doesn't appear
in the working code. You won't find the ith Fibonacci in base[i]; it's in
fib(i). But fib(-1) exists. What's important is that the C convention of
array indexes beginning at 0 has been circumvented.

I could be accused of subterfuge in depending on the semantics of static
storage to initialize fib(-1) to zero. Subterfuge or not, it's customary C
usage. The binomial-coefficient program relies on "out-of-bounds" zeros
abutting two sides of a triangle.

int base[N][N+2];
#define binom(n,i) base[n][(i)+1]

void fill() {
    binom(0,0) = 1;
    for(n=1; n<N; n++)
for(i=0; i<=n; i++)
            binom(n,i) = binom(n-1,i) + binom(n,i-1);
}

I think the offset algorithm above looks better than the more typical one
below.
The two programs happen to have identical character counts.

int binom[N][N+1];

void fill() {
    for(n=0; n<N; n++) {
        binom[n][0] = 1;
for(i=1; i<n; i++)
            binom[n][i] = binom[n-1][i] + binom[n][i-1];
binom[n][n] = 1;
    }
}

Doug

[-- Attachment #2: Type: text/html, Size: 2376 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-09-24 16:45 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-09-21 14:37 [COFF] Re: [TUHS] Maximum Array Sizes in 16 bit C Douglas McIlroy
  -- strict thread matches above, loose matches on Subject: below --
2024-09-23 20:59 Douglas McIlroy
2024-09-21  0:22 Douglas McIlroy
2024-09-24 16:44 ` Dan Cross

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).