From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,47fc49812a5e8e38 X-Google-NewGroupId: yes X-Google-Thread: 1094ba,676bf5aacd30dd7b X-Google-NewGroupId: yes X-Google-Attributes: gida07f3367d7,gid8d3408f8c3,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news2.google.com!news3.google.com!proxad.net!feeder1-2.proxad.net!usenet-fr.net!gegeweb.org!aioe.org!not-for-mail From: "Nasser M. Abbasi" Newsgroups: comp.lang.ada,comp.lang.fortran Subject: Re: small example, using complex variables in Ada Date: Mon, 14 Jun 2010 05:29:13 -0700 Organization: Aioe.org NNTP Server Message-ID: References: Reply-To: nma@12000.org NNTP-Posting-Host: c00eBs/j4mUkprxQFmXQpg.user.speranza.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org X-Notice: Filtered by postfilter v. 0.8.2 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.9) Gecko/20100317 Thunderbird/3.0.4 Xref: g2news2.google.com comp.lang.ada:12676 comp.lang.fortran:26883 Date: 2010-06-14T05:29:13-07:00 List-Id: On 6/14/2010 2:33 AM, Vincent LAFAGE wrote: > For instance, > $ gfortran-4.3 -Wall -Wsurprising -Wconversion dft.f90 -o dft > will reveal 11 surprising implicit conversion such as > dft.f90:14.29: > COMPLEX, parameter :: J =(0,1) > 1 > Warning: Conversion from INTEGER(4) to REAL(4) at (1) > > So "-Wall" is not the last word as far as warning are concerned. > Thanks, I did not know about these flags. I am impressed now with FORTRAN. The f90 compiler, with those flags added, became as annoying, opps, I mean as picky as the Ada compiler and complained about all the implicit conversions. Also, with the use of lbound and ubound in FORTRAN helped make the logic simpler by avoiding the 1-off problem. To update, below is the current version of the example in Ada and FORTRAN. I also made a small page where I kept these for reference. http://12000.org/my_notes/mma_matlab_control/KERNEL/node94.htm I think now it seems to me, from this simple example, that Ada and FORTRAN can be equally good languages for scientific applications. Thanks for everyone for the suggestions. ============= Ada ==================== -- -- dtf.adb, compiled with GNAT 4.3.4 20090804 (release) 1 -- under CYGWIN 1.7.5 -- $ gnatmake dft.adb -- gcc -c dft.adb -- gnatbind -x dft.ali -- gnatlink dft.ali -- $ ./dft.exe -- -- ( 6.00000E+00, 0.00000E+00) -- (-1.50000E+00, 8.66026E-01) -- (-1.50000E+00,-8.66025E-01) with Ada.Text_IO; use Ada.Text_IO; with Ada.Numerics.Complex_Types; use Ada.Numerics.Complex_Types; with Ada.Numerics; use Ada.Numerics; with Ada.Numerics.Complex_Elementary_Functions; use Ada.Numerics.Complex_Elementary_Functions; with Ada.Complex_Text_IO; use Ada.Complex_Text_IO; procedure dft is N : constant := 3; -- named number, no conversion to Float needed X : array(0 .. N-1) of Complex := (others=>(0.0,0.0)); data : constant array(0 .. N-1) of float :=(1.0,2.0,3.0); Two_Pi_Over_N : constant := 2 * Pi / N; -- named number, outside the loop, like in ARM 3.3.2(9) begin FOR k in X'range LOOP FOR m in data'range LOOP X(k) := X(k) + data(m)*exp(-J*Two_Pi_Over_N * float(m*k)); END LOOP; put(X(k)); new_line; END LOOP; end dft; ====================== Fortran ====================== ! dtf.f90, compiled with GCC 4.3.4 ! under CYGWIN 1.7.5 ! $ gfortran -Wall -Wsurprising -Wconversion dft.f90 ! $ ./a.exe ! ( 6.0000000 , 0.0000000 ) ! ( -1.4999999 , 0.86602557 ) ! ( -1.5000005 ,-0.86602497 ) ! $ PROGRAM dft IMPLICIT NONE INTEGER, parameter :: N = 3 COMPLEX, parameter :: J =(0.0,1.0) REAL, parameter :: Pi = ACOS(-1.0) INTEGER :: k,m COMPLEX, dimension(0:N-1) :: X REAL, dimension(0:N-1) :: data=(/1.0,2.0,3.0/) REAL, parameter :: Two_Pi_Over_N = 2.0*Pi/real(N) DO k = lbound(X, 1), ubound(X, 1) X(k)=(0.0,0.0) DO m = lbound(data, 1), ubound(data, 1) X(k) = X(k) + complex(data(m),0.0) & * EXP(-J*complex(Two_Pi_Over_N*real(m*k),0.0)) END DO print *,X(k) END DO END PROGRAM dft --Nasser