From: Georg Bauhaus <bauhaus@futureapps.de>
Subject: Re: Why does this work? (overloads)
Date: Thu, 08 Feb 2007 12:34:54 +0100
Date: 2007-02-08T12:34:40+01:00 [thread overview]
Message-ID: <1170934493.5363.63.camel@localhost.localdomain> (raw)
In-Reply-To: <1170931228.165961.8170@m58g2000cwm.googlegroups.com>
On Thu, 2007-02-08 at 02:40 -0800, Jerry wrote:
> Jeffrey R. Carter wrote:
> > Jerry wrote:
> >
> > > Yes, but time series are usually indexed from 0. Sometimes, the FFT
> > > of a time series is indexed from 0 and sometimes -NN/2 .. NN/2-1. When
> > > one uses a time series in a vector or matrix, conundrums obviously
> > > arise, not only in computer code but in print. I once figured out how
> > > to make Pascal let me have it both ways by declaring both types, one
> > > type indexed 0..NN-1 and the other 1..NN, and then I set a pointer of
> > > one type to an array originally declared with another type. I'm
> > > guessing that Ada doesn't allow this, however.
> >
> > No pointers needed:
> >
> > A : Vector (0 .. N - 1);
> > B : Vector (1 .. A'Length);
> >
> > A := B;
> > B := A;
> >
> > This is called sliding.
> >
> Good point. However, it uses twice the memory, and worse, changes made
> in A are not reflected in B without repeating the assignment A := B
> (correct?) and vice versa. My Pascal trick had neither of these
> problems yet carried boundary checking using either name.
Not sure whether it is what you are after, but you could either use
pointers to a common unconstrained array type, or simply slice renaming
if possible:
with Ada.Text_IO; use Ada;
procedure sp is
type Index is range 0 .. 666;
type A is array (Index range <>) of Float;
c: A(0 .. 3);
x: A renames c(0 .. 2);
y: A renames c(1 .. 3);
function "*"(v, w: A) return Float;
-- sum of products of pairwise matching components of `v` and `w`
-- pre: v'length = w'length
function "*"(v, w: A) return Float is
result: Float := 0.0;
j: Index := w'first;
begin
pragma assert(v'length = w'length);
for k in v'range loop
result := result + v(k) * w(j);
j := j + 1;
end loop;
return result;
end "*";
package FIO is new Text_IO.Float_IO(Float);
begin
FIO.Default_Aft := 2; FIO.Default_Exp := 0;
c := (1.0, 3.2, 3.7, 2.4);
FIO.Put(x * y); Text_IO.new_line;
c(2) := 1.0;
FIO.Put(x * y); Text_IO.new_line;
x(2) := -1.3;
FIO.Put(x * y); Text_IO.new_line;
y(2) := +1.3;
FIO.Put(x * y); Text_IO.new_line;
end sp;
next prev parent reply other threads:[~2007-02-08 11:34 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-02-07 4:39 Why does this work? (overloads) Jerry
2007-02-07 6:45 ` AW: " Grein, Christoph (Fa. ESG)
2007-02-07 7:07 ` Jerry
2007-02-07 7:26 ` AW: " Grein, Christoph (Fa. ESG)
2007-02-07 20:43 ` Jerry
2007-02-07 19:09 ` AW: " Jeffrey R. Carter
2007-02-07 21:13 ` Jerry
2007-02-07 21:33 ` Ludovic Brenta
2007-02-07 21:36 ` Randy Brukardt
2007-02-07 19:02 ` Jeffrey R. Carter
2007-02-07 19:21 ` Adam Beneschan
2007-02-07 19:25 ` Adam Beneschan
2007-02-08 0:51 ` Jeffrey R. Carter
2007-02-07 23:12 ` Robert A Duff
2007-02-08 0:49 ` Jeffrey R. Carter
2007-02-07 20:53 ` Jerry
2007-02-08 0:53 ` Jeffrey R. Carter
2007-02-08 10:40 ` Jerry
2007-02-08 11:34 ` Georg Bauhaus [this message]
2007-02-08 12:05 ` AW: " Grein, Christoph (Fa. ESG)
2007-02-08 18:52 ` Jeffrey R. Carter
2007-02-09 0:56 ` Jerry
2007-02-09 1:27 ` tmoran
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox