1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
REAL FUNCTION PSLAMCH( ICTXT, CMACH )
*
* -- ScaLAPACK auxiliary routine (version 1.7) --
* University of Tennessee, Knoxville, Oak Ridge National Laboratory,
* and University of California, Berkeley.
* May 1, 1997
*
* .. Scalar Arguments ..
CHARACTER CMACH
INTEGER ICTXT
* ..
*
* Purpose
* =======
*
* PSLAMCH determines single precision machine parameters.
*
* Arguments
* =========
*
* ICTXT (global input) INTEGER
* The BLACS context handle in which the computation takes
* place.
*
* CMACH (global input) CHARACTER*1
* Specifies the value to be returned by PSLAMCH:
* = 'E' or 'e', PSLAMCH := eps
* = 'S' or 's , PSLAMCH := sfmin
* = 'B' or 'b', PSLAMCH := base
* = 'P' or 'p', PSLAMCH := eps*base
* = 'N' or 'n', PSLAMCH := t
* = 'R' or 'r', PSLAMCH := rnd
* = 'M' or 'm', PSLAMCH := emin
* = 'U' or 'u', PSLAMCH := rmin
* = 'L' or 'l', PSLAMCH := emax
* = 'O' or 'o', PSLAMCH := rmax
*
* where
*
* eps = relative machine precision
* sfmin = safe minimum, such that 1/sfmin does not overflow
* base = base of the machine
* prec = eps*base
* t = number of (base) digits in the mantissa
* rnd = 1.0 when rounding occurs in addition, 0.0 otherwise
* emin = minimum exponent before (gradual) underflow
* rmin = underflow threshold - base**(emin-1)
* emax = largest exponent before overflow
* rmax = overflow threshold - (base**emax)*(1-eps)
*
* =====================================================================
*
* .. Local Scalars ..
INTEGER IDUMM
REAL TEMP
* ..
* .. External Subroutines ..
EXTERNAL SGAMN2D, SGAMX2D
* ..
* .. External Functions ..
LOGICAL LSAME
REAL SLAMCH
EXTERNAL LSAME, SLAMCH
* ..
* .. Executable Statements ..
*
TEMP = SLAMCH( CMACH )
IDUMM = 0
*
IF( LSAME( CMACH, 'E' ).OR.LSAME( CMACH, 'S' ).OR.
$ LSAME( CMACH, 'M' ).OR.LSAME( CMACH, 'U' ) ) THEN
CALL SGAMX2D( ICTXT, 'All', ' ', 1, 1, TEMP, 1, IDUMM,
$ IDUMM, -1, -1, IDUMM )
ELSE IF( LSAME( CMACH, 'L' ).OR.LSAME( CMACH, 'O' ) ) THEN
CALL SGAMN2D( ICTXT, 'All', ' ', 1, 1, TEMP, 1, IDUMM,
$ IDUMM, -1, -1, IDUMM )
END IF
*
PSLAMCH = TEMP
*
* End of PSLAMCH
*
END
|