From: "Nasser M. Abbasi" <nma@12000.org>
Subject: Re: getting same output as gfortran, long_float
Date: Thu, 30 Apr 2015 17:37:13 -0500
Date: 2015-04-30T17:37:13-05:00 [thread overview]
Message-ID: <mhuaqp$2jk$1@speranza.aioe.org> (raw)
In-Reply-To: 1kxou0nloqg9c$.1x0itzgdrlosm$.dlg@40tude.net
On 4/30/2015 5:08 PM, Dmitry A. Kazakov wrote:
>
> I don't know what FORTRAN does, but assuming, you are using Intel, the
> longest floating-point available there is not, as you seem assume, of 16
> bytes (quadruple-precision), but so-called extended precision, which is not
> that long (10 bytes, namely).
>
Yes, I do not know either how gfortran does it. I am on intel,
using
>gfortran --version
GNU Fortran (Ubuntu 4.8.2-19ubuntu1) 4.8.2
It might be linked to libquadmath? I see article on this
http://glennklockwood.blogspot.com/2014/02/linux-perf-libquadmath-and-gfortrans.html
"Executive Summary: libquadmath was introduced in GFortran 4.6
which fundamentally changed what the -fdefault-real-8 switch does"
thanks for your input below, will look at it:
> AFAIK, GNAT on x86 maps:
>
> Float to single precision float (4 bytes)
> Long_Float to double precision float (8 bytes)
> Long_Long_Float to extended precision float (10 bytes, effectively)
>
> You can try this program to see how many binary mantissa bits are available
> for each type:
> -----------------------------
> with Text_IO; use Text_IO;
> procedure Test is
> begin
> Put_Line ("Float mantissa:" & Integer'Image (Float'Machine_Mantissa));
> Put_Line ("Long Float mantissa:" & Integer'Image
> (Long_Float'Machine_Mantissa));
> Put_Line ("Long Long Float mantissa:" & Integer'Image
> (Long_Long_Float'Machine_Mantissa));
> end Test;
> --------------------------
> On an Intel machine it will print:
>
> Float mantissa: 24
> Long_Float mantissa: 53
> Long_Long_Float mantissa: 64
>
> If FORTRAN supports longer floating point numbers (e.g.
> quadruple-precision) then it must emulate them since Intel hardware does
> not have them. That would make computations quite slow and you should
> consider if you really need that many significant digits.
>
> If GNAT allowed floating-point emulation, you could declare a custom type
> of required precision:
>
> type My_Float is digits 34; -- 112 * lg(2)
>
> Which is advisable anyway in order to make your program portable. Using
> built-in types is a bad idea and poor taste in most cases.
>
> Since GNAT does support emulation, at least not with the standard compiler
> switches, you need a library for doing this.
>
next prev parent reply other threads:[~2015-04-30 22:37 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 [this message]
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
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