(j3.2006) Question about zero-sized array.

John Reid John.Reid
Wed Jun 21 12:04:54 EDT 2017



Daniel C Chen wrote:
> Thanks John and Malcolm for your response. I didn't make the questions
> clear enough so I will try again.
>
> As for Q1,
> non-allocatable case:
> real :: x(0) ! x is always defined by the standard. What is its value at
> this point?
> allocatable case:
> real, allocatable :: x(:)
> allocate(x0)) ! at this point, x is defined by allocation. Again, what
> is the value after allocation?

It is the value of a real array of rank 1 and size zero.

> As for Q2, I actualy meant to ask 'x' rather than 'a'.
> x = 0.0 ! Does x have value 0.0?

No. All the array elements are given the value 0.0, but this is a set of 
size 0.

> x = 1.0 ! x Does x have value 1.0?

No. Same reason.

> As for Q3, if x in Q2 is defined with the value 0.0 or 1.0 and used in
> the following statement respectively,
> a(:,:) = 1.0
> y(:) = MATMUL( a(:,:), x(:) )+ 2*y(:) ! Does the value of x affect the
> result?

No.

Hope this helps.

John.

> Thanks,
>
> Daniel
>
> XL Fortran Development, Fortran Standard Representative
> IBM Toronto Software Lab
> Phone: 905-413-3056
> Tie: 969-3056
> Email: cdchen at ca.ibm.com
> http://www.ibm.com/software/awdtools/fortran/xlfortran
>
> Inactive hide details for "Malcolm Cohen" ---06/20/2017 07:52:35
> PM---Daniel Chen asks: > The standard specifies, "Zero-sized a"Malcolm
> Cohen" ---06/20/2017 07:52:35 PM---Daniel Chen asks: > The standard
> specifies, "Zero-sized arrays and zero-length strings are
>
> From: "Malcolm Cohen" <malcolm at nag-j.co.jp>
> To: "'fortran standards email list for J3'" <j3 at mailman.j3-fortran.org>
> Date: 06/20/2017 07:52 PM
> Subject: Re: (j3.2006) Question about zero-sized array.
> Sent by: j3-bounces at mailman.j3-fortran.org
>
> ------------------------------------------------------------------------
>
>
>
> Daniel Chen asks:
>> The standard specifies, "Zero-sized arrays and zero-length strings are
>> always defined".
>> It also says "Allocation of a zero-sized array or zero-length character
>> variable causes the array or variable to become defined"
>>
>> Question1: Does it have initial value at all?
>
> John Reid opines:
>>Well, yes. It always has the same value, including initially.
>
> No.  Being allocatable or a pointer it is initially undefined.
> ?initially? means at the beginning of execution; at that point the array
> does not have any shape.
>
> Daniel continues::
>> allocate(a(7,0),x(0),y(7))
>> a(:,:) = 0.0 !Q2: Is this legal? What is the value of a?
>
> John replies:
>>Yes, you are broadcasting a scalar to every element of the array. a has
>>the value it always has when the size is zero.
>
> ?it always has? could be a little misleading here; being an array, the
> shape is part of the value, so the value is the 7x0 empty array and not
> the 0x23 empty array.  I?m not sure we have all this explicitly written
> down anywhere though, except for derived types, where we say the array
> bounds of a component are part of the value of the structure.  Outside
> of a structure it is the shape that?s important rather than the bounds.
>
> Cheers,
> --
> ..............Malcolm Cohen, NAG Oxford/Tokyo.
>
> *From:*j3-bounces at mailman.j3-fortran.org
> [mailto:j3-bounces at mailman.j3-fortran.org] *On Behalf Of *John Reid*
> Sent:*Wednesday, June 21, 2017 12:53 AM*
> To:*fortran standards email list for J3 <j3 at mailman.j3-fortran.org>*
> Subject:*Re: (j3.2006) Question about zero-sized array.
>
>
>
> Daniel C Chen wrote:
>> Hello,
>>
>> The standard specifies, "Zero-sized arrays and zero-length strings are
>> always defined".
>> It also says "Allocation of a zero-sized array or zero-length character
>> variable causes the array or variable to become defined"
>>
>> Question1: Does it have initial value at all?
>
> Well, yes. It always has the same value, including initially.
>
>> Question2: Can it appear as the LHS of an assignment?
>
> Yes.
>
>> Question3: Can it be used in an expression and have a defined result?
>
> Yes.
>>
>> Please consider the following example:
>>
>> program test
>> real, dimension(:,:), allocatable:: a
>> real, dimension(:), allocatable :: x,y
>>
>> allocate(a(7,0),x(0),y(7))
>> a(:,:) = 0.0 !Q2: Is this legal? What is the value of a?
>
> Yes, you are broadcasting a scalar to every element of the array. a has
> the value it always has when the size is zero.
>
>> x(:) = 0.0
>
> Yes, you are again broadcasting a scalar to every element of the array.
>
>> y(:) = 1.0
>> y(:) = MATMUL( a(:,:), x(:) ) !Q3: Is this legal? what is the value of y?
>
> Yes. Every element of y has the value 0.0.
>
>> end program test
>>
>> Non-allocatable version:
>
> Nothing is reallocated in the allocatable version, so this is the same.
>
> Cheers,
>
> John.
>
>> program test2
>> real :: a(7,0)
>> real :: x(0),y(7)
>>
>> a = 0.0 !Q2: is this legal? What is the value of a?
>> x = 0.0
>> y = 1.0
>> y = MATMUL( a, x ) !Q3: is this legal? what is the value of y?
>> end program test2
>>
>> Thanks,
>>
>> Daniel
>>
>> XL Fortran Development, Fortran Standard Representative
>> IBM Toronto Software Lab
>> Phone: 905-413-3056
>> Tie: 969-3056
>> Email: _cdchen at ca.ibm.com_ <mailto:cdchen at ca.ibm.com>
>> _http://www.ibm.com/software/awdtools/fortran/xlfortran_
>>
>>
>> _______________________________________________
>> J3 mailing list
>> _J3 at mailman.j3-fortran.org_ <mailto:J3 at mailman.j3-fortran.org>
>> _http://mailman.j3-fortran.org/mailman/listinfo/j3_
>>
> _______________________________________________
> J3 mailing list_
> __J3 at mailman.j3-fortran.org_ <mailto:J3 at mailman.j3-fortran.org>_
> __http://mailman.j3-fortran.org/mailman/listinfo/j3_
>
> *Disclaimer*
>
> The Numerical Algorithms Group Ltd is a company registered in England
> and Wales with company number 1249803. The registered office is:
> Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.
>
> This e-mail has been scanned for all viruses and malware, and may have
> been automatically archived by Mimecast Ltd, an innovator in Software as
> a Service (SaaS) for
> business._______________________________________________
> J3 mailing list
> J3 at mailman.j3-fortran.org
> http://mailman.j3-fortran.org/mailman/listinfo/j3
>
>
>
>
> _______________________________________________
> J3 mailing list
> J3 at mailman.j3-fortran.org
> http://mailman.j3-fortran.org/mailman/listinfo/j3
>



More information about the J3 mailing list