I have written a little programme called KindFinder that will find
all KIND Values that are implemented under your local Fortran Compiler.
The code is an improved and polished version I published earlier
this summer when we discussed "Is DOUBLE Precision here to stay?"
(http://www.mailbase.ac.uk/lists/comp-fortran-90/1998-06/index.html)
Alan Miller has kindly agreed to put the code onto his website at
http://www.ozemail.com.au/~milleraj/ under Miscellaneous Software
called kindfind.f90.
The code is written in F (actually the common subset of F and ELF90).
Alan and I have tested this code under DEC, NAG, Sun, Lahey, etc. and
the subsets ELF90 and F. (ELF90 has a little problem but that is
easily fixed.)
Mail me if any of you experience problems with the code or have
suggestions for improvements or enhancements.
The code is freely available for personal and research purposes but
any commercial use must obtain prior permission from me.
Usage:
<compile> kindfind.f90
<execute>
will display all KIND Values
generates two Files, Fortran_Kind_Module.f90
and NumericModel.f90
<compile> Fortran_Kind_Module.f90 NumericModel.f90
<execute>
will display KIND, DIGITS, PRECISION, etc
parameters that can be inquired within Fortran90/95
Note: I haven't adjusted filenames to the 8.3 limit under DOS.
However that is easily changed by adjusting the parameters
FileName = "NumericModel"
ModuleName = "Fortran_Kind_Module"
FileExt = ".f90"
in kindfind.f90.
A typical output is this one from my DEC Alpha workstation:
!---------------------------------------------------------!
! !
! KINDFINDER !
! !
! KIND Search & Evaluation for !
! FloatingPoint and Integer Types !
! of the local Fortran Compiler !
! !
! Author: Werner W Schulz (C) 1998 !
! (email: [log in to unmask]) !
! !
! !
! FloatingPoint Model Parameters: !
! Kind Precision Range Name !
! 4 6 37 Single !
! 8 15 307 Double !
! 16 33 4931 Extnd1 !
! !
! !
! Integer Model Parameters: !
! Kind Range Name !
! 1 2 Int_01 !
! 2 4 Int_02 !
! 4 9 Int_Def !
! 8 18 Int_08 !
! !
! !
! !
! NOTE: !
! KindFinder has generated a Programme and a Module in !
! !
! NumericModel.f90 !
! Fortran_Kind_Module.f90 !
! !
! that will compute and display the Numerical Parameters !
! of the various INTEGER & FLOATING POINT Types !
! as specified by Fortran and the local Compiler. !
! The ModuleFile is can be used elsewhere. !
! !
! All Code is compatible with the Fortran Subsets and !
! should be able to run on any Fortran90-conforming !
! Compiler including F and Elf90. !
! !
! NOTE: !
! Possible KIND Values for LOGICAL or CHARACTER Types !
! must be obtained in the local Fortran Reference Manual !
! !
!---------------------------------------------------------!
and the Fortran_Kind_Module looks like this:
module Fortran_Kind_Module
implicit none
! This Programme was generated by a copyrighted Code.
! Author: Werner W Schulz (C) 1998.
! The following Parameters present all available KIND Values
! under the Compiler that generated this Module.
! Integer KIND Parameters:
integer, parameter, public :: Int_01 = 1
integer, parameter, public :: Int_02 = 2
integer, parameter, public :: Int_Def = 4
integer, parameter, public :: Int_08 = 8
! Real/Complex KIND Parameters:
integer, parameter, public :: Single = 4
integer, parameter, public :: Double = 8
integer, parameter, public :: Extnd1 = 16
end module Fortran_Kind_Module
As you can see, Single and Double Precision are correctly identified
and named appropriately. DEC has an extended precision available and
a 64-bit INTEGER but that is not found on all machines.
NumericModel produces all you need to know about the underlying model
for these numbers:
INTEGER MODEL:
Name: Int_01 Int_02 Int_Def Int_08
KIND: 1 2 4 8
DIGITS: 7 15 31 63
RADIX: 2 2 2 2
RANGE: 2 4 9 18
HUGE: 127 32767 2147483647 9223372036854775807
FLOATINGPOINT MODEL (Real/Complex):
Name: Single Double Extnd1
KIND: 4 8 16
DIGITS: 24 53 113
RADIX: 2 2 2
MINEXPONENT: -125 -1021 -16381
MAXEXPONENT: 128 1024 16384
PRECISION: 6 15 33
RANGE: 37 307 4931
EPSILON: 1.192E-07 2.220E-16 1.926E-34
HUGE: 3.403E+38 1.798+308 1.190+4932
TINY: 1.175E-38 2.225-308 3.362-4932
I hope this code will helpful to some of you.
Cheers,
WWS
-----------------------------------------------------------------------
| Werner W Schulz |
| Dept of Chemistry email: [log in to unmask] |
| University of Cambridge Phone: (+44) (0)1223 336 502 |
| Lensfield Road Secretary: 1223 336 338 |
| Cambridge CB2 1EW Fax: 1223 336 536 |
| United Kingdom WWW: |
-----------------------------------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|