comp.lang.ada
 help / color / mirror / Atom feed
From: "Nasser M. Abbasi" <nma@12000.org>
Subject: Re: getting same output as gfortran, long_float
Date: Thu, 30 Apr 2015 20:40:05 -0500
Date: 2015-04-30T20:40:05-05:00	[thread overview]
Message-ID: <mhulhk$lsm$2@speranza.aioe.org> (raw)
In-Reply-To: mhuk46$nd5$1@dont-email.me

On 4/30/2015 8:16 PM, Jeffrey R. Carter wrote:

> You could always do
>
> with Ada.Text_IO;
> with PragmARC.Rational_Numbers;
> with PragmARC.Unbounded_Integers;
>
> procedure Foo_Rational is
>     use PragmARC;
>
>     use type Rational_Numbers.Rational;
>     use type Unbounded_Integers.Unbounded_Integer;
>
>     One_I  : constant Unbounded_Integers.Unbounded_Integer := +1;
>     Twelve : constant Rational_Numbers.Rational := Unbounded_Integers."+" (12) /
> One_I;
>     P0001  : constant Rational_Numbers.Rational := One_I / (+10_000); -- 0.0001
>     P1     : constant Rational_Numbers.Rational := One_I / (+10); -- 0.1
>
>     One : Rational_Numbers.Rational renames Rational_Numbers.One;
>
>     Result : constant Rational_Numbers.Rational := Twelve * P0001 / (One * (One -
> P1) ** 4);
> begin -- Foo_Rational
>     Ada.Text_IO.Put_Line (Item => Rational_Numbers.Image (Result) );
> end Foo_Rational;
>
> $ gnatmake -gnatano -gnatwa -O2 -fstack-check -I../RAC foo_rational.adb
> gcc-4.6 -c -gnatano -gnatwa -O2 -fstack-check -I../RAC foo_rational.adb
> gnatbind -I../RAC -x foo_rational.ali
> gnatlink foo_rational.ali -O2 -fstack-check
> jrcarter@jcarter-singo-laptop:~/Code$ ./foo_rational
> 0.0018289894833104709647919524462734339277549154092363968907178783
>72199359853680841335162322816643804298125285779606767261088248742569
>7302240512117055326931870141746684956561499771376314586191129401005
>94421582075903063557384545038866026520347508001828989483310470964791
>95244627343392775491540923639689071787837219935985368084133516232281
>664380429812528577960676726108824874256973022405121170553269318701

> The referenced PragmARC pkgs are available in the beta version of the PragmAda
> Reusable Components available from
>
> https://pragmada.x10hosting.com/pragmarc.htm
>

Thanks, this is very useful. I noticed small difference in output:
side-by-side:

Ada:          0.00182898948331047096479195244627343392775491540..
Mathematica*: 0.00182898948331047096479195244627343392775491540..
gfortran:     0.00182898948331047112025871115292829927

at digit 18, gfortran result is different. But your Ada rational
package gives same result as Mathematica. This tells me your
result is the accurate one !

Mathematica code:
12*1/(10000)/(1*(1 - 1/10)^4) -- do it all in symbolic first
       --->  4/2187

N[%, 100] ; -- ask for 100 digits numerical

humm....I do not know why these are different. I would have expected
gfortran to be accurate for at least 34 digits, not just 18. May be
I am doing something wrong in gfortran. Here is the gfortran again
for reference:

-------------------
PROGRAM foo
IMPLICIT NONE
REAL(KIND = 16) :: x  !-- kind=16 tells it is double quad
x = 12.0D0 * 0.0001D0/(1.0D0 * (1.0D0 - 0.1D0)**4 )
PRINT *, x
END PROGRAM
------------------

gfortran -Wall  foo2.f90





  reply	other threads:[~2015-05-01  1:40 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-30 21:17 getting same output as gfortran, long_float Nasser M. Abbasi
2015-04-30 22:08 ` Dmitry A. Kazakov
2015-04-30 22:11   ` Dmitry A. Kazakov
2015-04-30 22:37   ` Nasser M. Abbasi
2015-04-30 22:53     ` Nasser M. Abbasi
2015-05-01  7:22       ` Jacob Sparre Andersen
2015-05-01  1:12   ` Nasser M. Abbasi
2015-05-01  6:52     ` Dmitry A. Kazakov
2015-05-01  7:32       ` Nasser M. Abbasi
2015-05-01  7:45         ` Dmitry A. Kazakov
2015-05-04  0:15           ` robin.vowels
2015-05-04  7:21             ` Dmitry A. Kazakov
2015-05-04  8:53               ` robin.vowels
2015-05-04 10:18                 ` Dmitry A. Kazakov
2015-05-04 13:45                   ` robin.vowels
2015-05-04 14:47                     ` Dmitry A. Kazakov
2015-05-07  2:01                       ` robin.vowels
2015-05-01 23:24       ` Dennis Lee Bieber
2015-05-04  0:09       ` robin.vowels
2015-05-01  7:01     ` Dmitry A. Kazakov
2015-05-04  0:42     ` robin.vowels
2015-04-30 22:12 ` Jeffrey R. Carter
2015-04-30 22:27   ` Qun-Ying
2015-05-01  0:59     ` Dennis Lee Bieber
2015-04-30 22:32   ` Nasser M. Abbasi
2015-05-01  1:16     ` Jeffrey R. Carter
2015-05-01  1:40       ` Nasser M. Abbasi [this message]
2015-05-01  7:47         ` Jacob Sparre Andersen
2015-05-01 15:39         ` Waldek Hebisch
2015-05-01 17:27           ` Nasser M. Abbasi
2015-05-01 18:03             ` Nasser M. Abbasi
2015-05-04  0:51             ` robin.vowels
2015-05-04  0:47         ` robin.vowels
2015-05-01  8:21 ` Simon Wright
2015-05-01 11:55 ` 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