|
- *> \brief \b DROUNDUP_LWORK
- *
- * =========== DOCUMENTATION ===========
- *
- * Online html documentation available at
- * http://www.netlib.org/lapack/explore-html/
- *
- * Definition:
- * ===========
- *
- * DOUBLE PRECISION FUNCTION DROUNDUP_LWORK( LWORK )
- *
- * .. Scalar Arguments ..
- * INTEGER LWORK
- * ..
- *
- *
- *> \par Purpose:
- * =============
- *>
- *> \verbatim
- *>
- *> DROUNDUP_LWORK deals with a subtle bug with returning LWORK as a Float.
- *> This routine guarantees it is rounded up instead of down by
- *> multiplying LWORK by 1+eps when it is necessary, where eps is the relative machine precision.
- *> E.g.,
- *>
- *> float( 9007199254740993 ) == 9007199254740992
- *> float( 9007199254740993 ) * (1.+eps) == 9007199254740994
- *>
- *> \return DROUNDUP_LWORK
- *> \verbatim
- *> DROUNDUP_LWORK >= LWORK.
- *> DROUNDUP_LWORK is guaranteed to have zero decimal part.
- *> \endverbatim
- *
- * Arguments:
- * ==========
- *
- *> \param[in] LWORK Workspace size.
- *
- * Authors:
- * ========
- *
- *> \author Weslley Pereira, University of Colorado Denver, USA
- *
- *> \ingroup auxOTHERauxiliary
- *
- *> \par Further Details:
- * =====================
- *>
- *> \verbatim
- *> This routine was inspired in the method `magma_zmake_lwork` from MAGMA.
- *> \see https://bitbucket.org/icl/magma/src/master/control/magma_zauxiliary.cpp
- *> \endverbatim
- *
- * =====================================================================
- DOUBLE PRECISION FUNCTION DROUNDUP_LWORK( LWORK )
- *
- * -- 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 LWORK
- * ..
- *
- * =====================================================================
- * ..
- * .. Intrinsic Functions ..
- INTRINSIC EPSILON, DBLE, INT
- * ..
- * .. Executable Statements ..
- * ..
- DROUNDUP_LWORK = DBLE( LWORK )
- *
- IF( INT( DROUNDUP_LWORK ) .LT. LWORK ) THEN
- * Force round up of LWORK
- DROUNDUP_LWORK = DROUNDUP_LWORK * ( 1.0D+0 + EPSILON(0.0D+0) )
- ENDIF
- *
- RETURN
- *
- * End of DROUNDUP_LWORK
- *
- END
|