PROGRAM PrecisionCheck

DART project logo

Jump to DART Documentation Main Index
version information for this file:
$Id: PrecisionCheck.html 6380 2013-08-05 23:47:11Z nancy $

TERMS OF USE

Overview

This is a self-contained program to explore the interaction between the compiler options to 'autopromote' variables from one precision to another and the intrinsic F90 mechanism for getting consistent behavior without relying on autopromotion - namely, the SELECT_INT_KIND() and SELECT_REAL_KIND() functions. The most portable code explicity types the variables to avoid relying on compiler flags. The core DART code abides by these rules; some pieces that are derived from dynamical models may have original code fragments.

All that is required is to compile the single file and run the resulting executable. There are no required libraries - any F90 compiler should have no trouble with this program. There is no input of any kind.

You are encouraged to view the source code. It's pretty obvious what is being tested.

[top]

EXAMPLES

The following examples have differences from the default configuration highlighted in boldface. You are strongly encouraged to test your compiler and its autopromotion options. The Absoft compiler actually does what I consider to be reasonable and logical (as long as you know that "-dp" means demote precision). Many other compilers are surprising.

PowerPC chipset : Absoft Pro Fortran 9.0

[~/DART/utilities] % f90 PrecisionCheck.f90
[~/DART/utilities] % ./a.out
 
 This explores the use of the intrinisc SELECTED_[REAL,INT]_KIND() functions
 and the interplay with the compiler options. You are encouraged to use the
 "autopromotion" flags on your compiler and compare the results.
 
----------------------------------------------
 "integer"
 DIGITS    =   31
 HUGE      =   2147483647
 KIND      =   4
----------------------------------------------
 "integer(i4)" i4 = SELECTED_INT_KIND(8)
 DIGITS    =   31
 HUGE      =   2147483647
 KIND      =   4
----------------------------------------------
 "integer(i8)" i8 = SELECTED_INT_KIND(13)
 DIGITS    =   63
 HUGE      =   9223372036854775807
 KIND      =   8
----------------------------------------------
 "real"
 DIGITS    =   24
 EPSILON   =   1.192093E-07
 HUGE      =   3.402823E+38
 KIND      =   4
 PRECISION =   6
----------------------------------------------
 "real(r4)" r4 = SELECTED_REAL_KIND(6,30)
 DIGITS    =   24
 EPSILON   =   1.192093E-07
 HUGE      =   3.402823E+38
 KIND      =   4
 PRECISION =   6
----------------------------------------------
 "real(r8)" r8 = SELECTED_REAL_KIND(13)
 DIGITS    =   53
 EPSILON   =   2.220446049250313E-016
 HUGE      =   1.797693134862315E+308
 KIND      =   8
 PRECISION =   15
----------------------------------------------
 "double precision"
 DIGITS    =   53
 EPSILON   =   2.220446049250313E-016
 HUGE      =   1.797693134862315E+308
 KIND      =   8
 PRECISION =   15

PowerPC chipset : Absoft Pro Fortran 9.0 : "-dp"

[~/DART/utilities] % f90 -dp PrecisionCheck.f90
[~/DART/utilities] % ./a.out
 
 This explores the use of the intrinisc SELECTED_[REAL,INT]_KIND() functions
 and the interplay with the compiler options. You are encouraged to use the
 "autopromotion" flags on your compiler and compare the results.
 
----------------------------------------------
 "integer"
 DIGITS    =   31
 HUGE      =   2147483647
 KIND      =   4
----------------------------------------------
 "integer(i4)" i4 = SELECTED_INT_KIND(8)
 DIGITS    =   31
 HUGE      =   2147483647
 KIND      =   4
----------------------------------------------
 "integer(i8)" i8 = SELECTED_INT_KIND(13)
 DIGITS    =   63
 HUGE      =   9223372036854775807
 KIND      =   8
----------------------------------------------
 "real"
 DIGITS    =   24
 EPSILON   =   1.192093E-07
 HUGE      =   3.402823E+38
 KIND      =   4
 PRECISION =   6
----------------------------------------------
 "real(r4)" r4 = SELECTED_REAL_KIND(6,30)
 DIGITS    =   24
 EPSILON   =   1.192093E-07
 HUGE      =   3.402823E+38
 KIND      =   4
 PRECISION =   6
----------------------------------------------
 "real(r8)" r8 = SELECTED_REAL_KIND(13)
 DIGITS    =   53
 EPSILON   =   2.220446049250313E-016
 HUGE      =   1.797693134862315E+308
 KIND      =   8
 PRECISION =   15
----------------------------------------------
 "double precision"
 DIGITS    =   24
 EPSILON   =   1.192093E-07
 HUGE      =   3.402823E+38
 KIND      =   4
 PRECISION =   6

PowerPC chipset : Absoft Pro Fortran 9.0 : "-N113"

[~/DART/utilities] % f90 -N113 PrecisionCheck.f90
[~/DART/utilities] % ./a.out
 
 This explores the use of the intrinisc SELECTED_[REAL,INT]_KIND() functions
 and the interplay with the compiler options. You are encouraged to use the
 "autopromotion" flags on your compiler and compare the results.
 
----------------------------------------------
 "integer"
 DIGITS    =   31
 HUGE      =   2147483647
 KIND      =   4
----------------------------------------------
 "integer(i4)" i4 = SELECTED_INT_KIND(8)
 DIGITS    =   31
 HUGE      =   2147483647
 KIND      =   4
----------------------------------------------
 "integer(i8)" i8 = SELECTED_INT_KIND(13)
 DIGITS    =   63
 HUGE      =   9223372036854775807
 KIND      =   8
----------------------------------------------
 "real"
 DIGITS    =   53
 EPSILON   =   2.220446049250313E-016
 HUGE      =   1.797693134862315E+308
 KIND      =   8
 PRECISION =   15
----------------------------------------------
 "real(r4)" r4 = SELECTED_REAL_KIND(6,30)
 DIGITS    =   24
 EPSILON   =   1.192093E-07
 HUGE      =   3.402823E+38
 KIND      =   4
 PRECISION =   6
----------------------------------------------
 "real(r8)" r8 = SELECTED_REAL_KIND(13)
 DIGITS    =   53
 EPSILON   =   2.220446049250313E-016
 HUGE      =   1.797693134862315E+308
 KIND      =   8
 PRECISION =   15
----------------------------------------------
 "double precision"
 DIGITS    =   53
 EPSILON   =   2.220446049250313E-016
 HUGE      =   1.797693134862315E+308
 KIND      =   8
 PRECISION =   15
[top]

Terms of Use

DART software - Copyright 2004 - 2013 UCAR.
This open source software is provided by UCAR, "as is",
without charge, subject to all terms of use at
http://www.image.ucar.edu/DAReS/DART/DART_download

Contact: Tim Hoar
Revision: $Revision: 6380 $
Source: $URL: https://svn-dares-dart.cgd.ucar.edu/DART/releases/classic/utilities/PrecisionCheck.html $
Change Date: $Date: 2013-08-05 17:47:11 -0600 (Mon, 05 Aug 2013) $
Change history:  try "svn log" or "svn diff"