|
- *> \brief \b IEEECK
- *
- * =========== DOCUMENTATION ===========
- *
- * Online html documentation available at
- * http://www.netlib.org/lapack/explore-html/
- *
- *> \htmlonly
- *> Download IEEECK + dependencies
- *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/ieeeck.f">
- *> [TGZ]</a>
- *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/ieeeck.f">
- *> [ZIP]</a>
- *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ieeeck.f">
- *> [TXT]</a>
- *> \endhtmlonly
- *
- * Definition:
- * ===========
- *
- * INTEGER FUNCTION IEEECK( ISPEC, ZERO, ONE )
- *
- * .. Scalar Arguments ..
- * INTEGER ISPEC
- * REAL ONE, ZERO
- * ..
- *
- *
- *> \par Purpose:
- * =============
- *>
- *> \verbatim
- *>
- *> IEEECK is called from the ILAENV to verify that Infinity and
- *> possibly NaN arithmetic is safe (i.e. will not trap).
- *> \endverbatim
- *
- * Arguments:
- * ==========
- *
- *> \param[in] ISPEC
- *> \verbatim
- *> ISPEC is INTEGER
- *> Specifies whether to test just for infinity arithmetic
- *> or whether to test for infinity and NaN arithmetic.
- *> = 0: Verify infinity arithmetic only.
- *> = 1: Verify infinity and NaN arithmetic.
- *> \endverbatim
- *>
- *> \param[in] ZERO
- *> \verbatim
- *> ZERO is REAL
- *> Must contain the value 0.0
- *> This is passed to prevent the compiler from optimizing
- *> away this code.
- *> \endverbatim
- *>
- *> \param[in] ONE
- *> \verbatim
- *> ONE is REAL
- *> Must contain the value 1.0
- *> This is passed to prevent the compiler from optimizing
- *> away this code.
- *>
- *> RETURN VALUE: INTEGER
- *> = 0: Arithmetic failed to produce the correct answers
- *> = 1: Arithmetic produced the correct answers
- *> \endverbatim
- *
- * Authors:
- * ========
- *
- *> \author Univ. of Tennessee
- *> \author Univ. of California Berkeley
- *> \author Univ. of Colorado Denver
- *> \author NAG Ltd.
- *
- *> \ingroup OTHERauxiliary
- *
- * =====================================================================
- INTEGER FUNCTION IEEECK( ISPEC, ZERO, ONE )
- *
- * -- LAPACK auxiliary routine --
- * -- LAPACK is a software package provided by Univ. of Tennessee, --
- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
- *
- * .. Scalar Arguments ..
- INTEGER ISPEC
- REAL ONE, ZERO
- * ..
- *
- * =====================================================================
- *
- * .. Local Scalars ..
- REAL NAN1, NAN2, NAN3, NAN4, NAN5, NAN6, NEGINF,
- $ NEGZRO, NEWZRO, POSINF
- * ..
- * .. Executable Statements ..
- IEEECK = 1
- *
- POSINF = ONE / ZERO
- IF( POSINF.LE.ONE ) THEN
- IEEECK = 0
- RETURN
- END IF
- *
- NEGINF = -ONE / ZERO
- IF( NEGINF.GE.ZERO ) THEN
- IEEECK = 0
- RETURN
- END IF
- *
- NEGZRO = ONE / ( NEGINF+ONE )
- IF( NEGZRO.NE.ZERO ) THEN
- IEEECK = 0
- RETURN
- END IF
- *
- NEGINF = ONE / NEGZRO
- IF( NEGINF.GE.ZERO ) THEN
- IEEECK = 0
- RETURN
- END IF
- *
- NEWZRO = NEGZRO + ZERO
- IF( NEWZRO.NE.ZERO ) THEN
- IEEECK = 0
- RETURN
- END IF
- *
- POSINF = ONE / NEWZRO
- IF( POSINF.LE.ONE ) THEN
- IEEECK = 0
- RETURN
- END IF
- *
- NEGINF = NEGINF*POSINF
- IF( NEGINF.GE.ZERO ) THEN
- IEEECK = 0
- RETURN
- END IF
- *
- POSINF = POSINF*POSINF
- IF( POSINF.LE.ONE ) THEN
- IEEECK = 0
- RETURN
- END IF
- *
- *
- *
- *
- * Return if we were only asked to check infinity arithmetic
- *
- IF( ISPEC.EQ.0 )
- $ RETURN
- *
- NAN1 = POSINF + NEGINF
- *
- NAN2 = POSINF / NEGINF
- *
- NAN3 = POSINF / POSINF
- *
- NAN4 = POSINF*ZERO
- *
- NAN5 = NEGINF*NEGZRO
- *
- NAN6 = NAN5*ZERO
- *
- IF( NAN1.EQ.NAN1 ) THEN
- IEEECK = 0
- RETURN
- END IF
- *
- IF( NAN2.EQ.NAN2 ) THEN
- IEEECK = 0
- RETURN
- END IF
- *
- IF( NAN3.EQ.NAN3 ) THEN
- IEEECK = 0
- RETURN
- END IF
- *
- IF( NAN4.EQ.NAN4 ) THEN
- IEEECK = 0
- RETURN
- END IF
- *
- IF( NAN5.EQ.NAN5 ) THEN
- IEEECK = 0
- RETURN
- END IF
- *
- IF( NAN6.EQ.NAN6 ) THEN
- IEEECK = 0
- RETURN
- END IF
- *
- RETURN
- END
|