I have been using the gcc 3.4.4 GNAT compiler to compile an existing Ada
program on an HP-UX 11 system. 

We have noticed that generated images of floating-point numbers often
appear with the least-significant digit incremented by 1.  Since the
application is used in a calibration laboratory, this situation is not
acceptable to the users.  Below is some sample output, followed by a
listing of the program that produced the output.  This same program
produces the expected output when compiled and run on a Windows machine,
that uses the same revision (3.4.4 -- cygming special) of the compiler.
The program also produces the expected output when compiled with the
older GNAT-3.15p compiler on the HP-UX machine.  Using gdb 6.3 to step
through the program as it was running on the HP-UX machine showed that
the Value attribute did correctly convert the string representation
("1.0000") to 1.0 for both Float and Long_Float cases.

The build configuration for the compiler is:

Reading specs from
/site/sw/gcc-3.4.4/lib/gcc/hppa2.0w-hp-hpux11.11/3.4.4/specs
Configured with: ../gcc-3.4.4/configure --prefix=/site/sw/gcc-3.4.4
--with-gnu-as --with-as=/site/sw/gcc-3.4.4/bin/as --disable-nls
--enable-languages=c,c++,ada --enable-threads=gnat
Thread model: gnat
gcc version 3.4.4

And the as version is:

GNU assembler version 2.15 (hppa2.0w-hp-hpux11.11) using BFD version
2.15

I have also noted the same behavior with the gcc 4.0 GNAT compiler.

Any suggestions or ideas would be appreciated.

Thanks,

Carus V. (Bud) Clarke
[EMAIL PROTECTED]

------------------------------------------------------------------------
------------------

Program output:

The number's string representation is: 1.0000
The image of the float value is:  1.00001E+00
Text_Io output for float value is:    1.00001
The image of the long-float value is:  1.00000000000001E+00
Text_Io output for long-float value is:    1.0000001

------------------------------------------------------------------------
------------------

Program code:

------------------------------------------------------------------------
-- File: test_float_image.adb
-- Date: Oct. 20, 2005
------------------------------------------------------------------------

with Ada.Text_Io;
with Ada.Float_Text_Io;
with Ada.Long_Float_Text_Io;

procedure Test_Float_Image is
   XSTR : constant String     := "1.0000";
   XF   : constant Float      := Float'Value(XSTR);
   XL   : constant Long_Float := Long_Float'Value(XSTR);
begin
   Ada.Text_Io.Put ("The number's string representation is: ");
   Ada.Text_Io.Put (XSTR);
   Ada.Text_Io.New_Line;
   Ada.Text_Io.Put ("The image of the float value is: ");
   Ada.Text_Io.Put (Float'Image(XF));
   Ada.Text_Io.New_Line;
   Ada.Text_Io.Put ("Text_Io output for float value is: ");
   Ada.Float_Text_Io.Put (Item => XF,
                                     Fore => 4,
                                     Aft  => 5,
                                     Exp  => 0);
   Ada.Text_Io.New_Line;
   Ada.Text_Io.Put ("The image of the long-float value is: ");
   Ada.Text_Io.Put (Long_Float'Image(XL));
   Ada.Text_Io.New_Line;
   Ada.Text_Io.Put ("Text_Io output for long-float value is: ");
   Ada.Long_Float_Text_Io.Put (Item => XL,
                                              Fore => 4,
                                              Aft  => 7,
                                             Exp  => 0);
   Ada.Text_Io.New_Line;
end Test_Float_Image;

------------------------------------------------------------------------
------------------

Reply via email to