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.9 required=5.0 tests=BAYES_00,FORGED_GMAIL_RCVD, FREEMAIL_FROM autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,8c0fcfc0a87e61fc X-Google-NewGroupId: yes X-Google-Attributes: gida07f3367d7,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII Path: g2news1.google.com!postnews.google.com!28g2000yqm.googlegroups.com!not-for-mail From: "cjpsimon@gmail.com" Newsgroups: comp.lang.ada Subject: Re: simple question on long_float/short_float Date: Sat, 2 Oct 2010 03:45:33 -0700 (PDT) Organization: http://groups.google.com Message-ID: References: NNTP-Posting-Host: 86.72.218.90 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Trace: posting.google.com 1286016333 9875 127.0.0.1 (2 Oct 2010 10:45:33 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Sat, 2 Oct 2010 10:45:33 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: 28g2000yqm.googlegroups.com; posting-host=86.72.218.90; posting-account=Iggr9woAAAAgws9p-w0sNB_7y6hLoOxg User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10 ( .NET CLR 3.5.30729; .NET4.0C),gzip(gfe) Xref: g2news1.google.com comp.lang.ada:14353 Date: 2010-10-02T03:45:33-07:00 List-Id: On 2 oct, 11:11, "Nasser M. Abbasi" wrote: > Ada experts; > > I have a follow up. > > It says herehttp://www.pegasoft.ca/resources/boblap/17.html > > "Gnat provides interfacing packages for languages besides C. > Interfaces.Fortran contains types and subprograms to link Fortran > language programs to your Ada programs. The GCC Fortran 77 compiler is g7= 7. > > As with gcc, most of the Fortran data types correspond identically with > an Ada type. A Fortran real variable, for example, is the same as an Ada > float, and a double precision variable is an Ada long_float. Other Ada > compilers may not do this: if portability is an issue, always use the > types of Interfaces.Fortran." > > I wrote a small Ada program to print a value of a floating number which > has the type Double_Precision, and printed the value to the screen. > > I did the same in Fortran, same number, and printed the value to screen. > In Fortran, the value printed is that of IEEE754, and in Ada it also > printed the same as Fortran. So I am happy to see that. Here is the code > and the output: > > ---- Ada =A0v1 ---- > with ada.text_io; > with Interfaces.Fortran; use Interfaces.Fortran; > > procedure test is > =A0 =A0package my_float_IO is new Ada.Text_IO.float_IO(Double_Precision); > =A0 =A0 use =A0my_float_IO; > =A0 =A0a : Double_Precision =A0:=3D 2.3; > begin > =A0 Put( item=3D>a,Fore=3D>25,Aft=3D>16) ; > end test; > > ---- fortran ---- > program main > =A0 =A0 =A0implicit none > =A0 =A0 =A0double precision :: c=3D2.3D0 > > =A0 =A0 =A0write (*,'(F25.16)') c > end program main > > ---- output of the above in same order ---- > 2.2999999999999998E+00 =A0---- Ada > 2.2999999999999998 =A0 =A0 =A0---- Fortran > > Then I changed the Ada code to the following: > > ---- Ada v2 ----- > with ada.text_io; > procedure test is > =A0 =A0type my_float_type is digits 16; > =A0 =A0package my_float_IO is new Ada.Text_IO.float_IO(my_float_type); > =A0 =A0 use =A0my_float_IO; > =A0 =A0a : my_float_type :=3D 2.3; > begin > =A0 Put( item=3D>a,Fore=3D>25,Aft=3D>16) ; > end test; > > and now the output is > > 2.3000000000000000E+00 > > ------------------------------ > > 1) So, it seems to me that Ada did use Fortran double in v1. since > output is different than in v2. Unless I made a mistake in v2. Hence, I > do not understand why the webpage above said that Gnat would use the > same types. Can I change v2 to make it output the same as Fortran? I > assume not, since it is not double to start with. > > 2) The reason I wanted to use Fortran double type, so I can compare the > output of my Ada program to that of Fortran and some output in the textbo= ok. > > 3) I need to read more about Ada Float type. Standard is IEEE754, so if > Ada float does not use this, would this not make the analysis of > floating point computation in Ada harder? Most textbooks and numerical > stuff, assume IEEE754 computation done on floating points. > > I also need to study more about Ada floats and how they work. What I do > not understand yet, does Ada does use IEEE754 for its floats? Assuming > it does, then it must do something additional at run-time to obtain the > result it needs when one uses DIGITS nnn in the type definition for Ada > float. > > --Nasser I think Long_Float representation is limited to digits 15. As you want to have digits 16 the compiler have to choose Long_Long_Float representation or to reject your code depending of the hardware. Claude