comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Why this error, value not in range of subtype of "Standard.Integer"?
Date: Tue, 26 Jun 2012 21:00:15 +0300
Date: 2012-06-26T21:00:15+03:00	[thread overview]
Message-ID: <a4ublfFfesU1@mid.individual.net> (raw)
In-Reply-To: <jsclls$3bv$1@speranza.aioe.org>

On 12-06-26 18:49 , Nasser M. Abbasi wrote:
> experts;
>
> If I write this, I get an error as show: (notice the B
> matrix declaration, that is where the problem is)

No, the problem is in the declaration of the A matrix. Or really in the 
difference in their declarations.

> -------------- this does not work ------
> with Ada.Numerics.Real_Arrays; use Ada.Numerics.Real_Arrays;
>
> procedure foo2 is
> A : constant Real_Matrix :=
> (( 1.0, 2.0, 3.0),
> ( 4.0, 5.0, 6.0),
> ( 7.0, 8.0, 9.0));

The Real_Matrix type is defined in Ada.Numerics.Real_Arrays with Integer 
as the index type:

type Real_Matrix is array (Integer range <>, Integer range <>)
                                                    of Real'Base;

This means that the matrix A, which is constrained by its initial value, 
has the lower index bounds Integer'First, which in the case of 32-bit 
integers is -2147483648, and the upper index bound is Integer'First + 2, 
which is -2147483646. Far out of the range of the indices of B, 1..3.

Change the declaration of A to specify the index ranges:

    A : constant Real_Matrix (1 .. 3, 1 .. 3) :=

> But if I change the declaration of B from
> B : Real_Matrix(1 .. 3,1 .. 3);
> to
> B : Real_Matrix(A'RANGE(1), A'RANGE(2));
>
> then Ada is happy now.

Yep. Now B also has the index range Integer'First .. Integer'First + 2.

> Isn't A'RANGE(1) the same as 1 .. 3 and A'RANGE(2) the same as 1 .. 3?

That would be the case, if Real_Matrix were defined with Positive as the 
index range. But not with Integer.

-- 
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
       .      @       .



  parent reply	other threads:[~2012-06-26 18:00 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-26 15:49 Why this error, value not in range of subtype of "Standard.Integer"? Nasser M. Abbasi
2012-06-26 17:20 ` Adam Beneschan
2012-06-26 18:00 ` Niklas Holsti [this message]
2012-06-26 21:39 ` Robert A Duff
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox