Numerical Recipes is non-portable code
Rob Carriere
rob at kaa.eng.ohio-state.edu
Mon Sep 5 11:33:44 AEST 1988
In article <15029 at ism780c.isc.com> marv at ism780.UUCP (Marvin Rubenstein) writes:
>In article <557 at accelerator.eng.ohio-state.edu> rob at kaa.eng.ohio-state.edu
>(Rob Carriere) writes:
>> [ still on non-0 base arrays ]
>Could you give a small example, perhaps I don't understand. with a
>declaration (using an extended version of C):
>
> int x(5:49),y(0:44);
> int i,k;
> i=6;
> k=x(i); /* easy to write access to second item */
> k=y(i-5); /* more trouble to write access to second item */
>
>However, with a reasonable compiler, both assignments to k will generate
>identical code. Your compiler may vary :-). But if you are writing time
>critical code with a faulty compiler, I guess you do what you can.
You more or less have the idea (except that the array would be float,
I'm one of them there dirty numerical geeks :-). Actually, a
reasonable (as opposed to a *very* good) compiler would probably
generate better code for k=x[i]; because it cannot do the optimization
I'm trying to manually make either: illegal pointer! To add insult to
the poor compiler's injury, in most cases the code would actually
read:
void foo( int n )
{
float *x;
int i;
float k;
i = 6;
x = vector( 5, n );
...
k = x[i];
...
}
...
foo( 49 );
As a further and at least as important point, the code is generated
from some underlying math that insists that x starts at (say) 5. So I
can fake it and confuse everyone with my constant -5 offsets in all
the indeces, or I can use a non-zero base offset.
If you are curious as to what perverse math would generate such stuff
(and it's *not* because they don't know to start counting at zero!), I
sent off a mail message with a couple of examples to Marty Fouts who
asked the same question. It's a bit too long and too marginal to this
group to post, but I'd gladly send you a copy (be sure to give me a
*very* complete email address, our mail deamon spends far more time
earning its last than its first name!)
Rob Carriere
More information about the Comp.lang.c
mailing list