From: "Nasser M. Abbasi" <nma@12000.org>
Subject: Re: simple question on long_float/short_float
Date: Sat, 02 Oct 2010 02:11:10 -0700
Date: 2010-10-02T02:11:10-07:00 [thread overview]
Message-ID: <i86svu$6ki$1@speranza.aioe.org> (raw)
In-Reply-To: i81a1r$3or$1@speranza.aioe.org
Ada experts;
I have a follow up.
It says here
http://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 g77.
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 v1 ----
with ada.text_io;
with Interfaces.Fortran; use Interfaces.Fortran;
procedure test is
package my_float_IO is new Ada.Text_IO.float_IO(Double_Precision);
use my_float_IO;
a : Double_Precision := 2.3;
begin
Put( item=>a,Fore=>25,Aft=>16) ;
end test;
---- fortran ----
program main
implicit none
double precision :: c=2.3D0
write (*,'(F25.16)') c
end program main
---- output of the above in same order ----
2.2999999999999998E+00 ---- Ada
2.2999999999999998 ---- Fortran
Then I changed the Ada code to the following:
---- Ada v2 -----
with ada.text_io;
procedure test is
type my_float_type is digits 16;
package my_float_IO is new Ada.Text_IO.float_IO(my_float_type);
use my_float_IO;
a : my_float_type := 2.3;
begin
Put( item=>a,Fore=>25,Aft=>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 textbook.
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
next prev parent reply other threads:[~2010-10-02 9:11 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-30 6:17 simple question on long_float/short_float Nasser M. Abbasi
2010-09-30 6:58 ` J-P. Rosen
2010-09-30 8:31 ` Nasser M. Abbasi
2010-09-30 8:45 ` Nasser M. Abbasi
2010-09-30 9:59 ` Mark Lorenzen
2010-09-30 13:30 ` Peter C. Chapin
2010-09-30 8:46 ` AdaMagica
2010-09-30 10:02 ` Georg Bauhaus
2010-09-30 15:37 ` Jeffrey Carter
2010-09-30 18:22 ` Nasser M. Abbasi
2010-09-30 21:21 ` Peter C. Chapin
2010-10-01 0:29 ` Nasser M. Abbasi
2010-10-01 11:13 ` Peter C. Chapin
2010-10-02 19:57 ` Simon Wright
2010-09-30 15:56 ` Adam Beneschan
2010-10-02 9:11 ` Nasser M. Abbasi [this message]
2010-10-02 9:48 ` Dmitry A. Kazakov
2010-10-02 20:09 ` Simon Wright
2010-10-02 9:56 ` Nasser M. Abbasi
2010-10-02 10:45 ` cjpsimon
2010-10-02 16:52 ` Jeffrey Carter
2010-10-02 20:01 ` Georg Bauhaus
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox