205 lines
5.8 KiB
C
205 lines
5.8 KiB
C
/* -- translated by f2c (version 20240504).
|
|
You must link the resulting object file with libf2c:
|
|
on Microsoft Windows system, link with libf2c.lib;
|
|
on Linux or Unix systems, link with .../path/to/libf2c.a -lm
|
|
or, if you install libf2c.a in a standard place, with -lf2c -lm
|
|
-- in that order, at the end of the command line, as in
|
|
cc *.o -lf2c -lm
|
|
Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
|
|
|
|
http://www.netlib.org/f2c/libf2c.zip
|
|
*/
|
|
|
|
#include "f2c.h"
|
|
|
|
/* Table of constant values */
|
|
|
|
static doublereal c_b2 = 0.;
|
|
|
|
/* > \brief \b DLAMCH
|
|
|
|
=========== DOCUMENTATION ===========
|
|
|
|
Online html documentation available at
|
|
http://www.netlib.org/lapack/explore-html/
|
|
|
|
Definition:
|
|
===========
|
|
|
|
DOUBLE PRECISION FUNCTION DLAMCH( CMACH )
|
|
|
|
|
|
> \par Purpose:
|
|
=============
|
|
>
|
|
> \verbatim
|
|
>
|
|
> DLAMCH determines double precision machine parameters.
|
|
> \endverbatim
|
|
|
|
Arguments:
|
|
==========
|
|
|
|
> \param[in] CMACH
|
|
> \verbatim
|
|
> Specifies the value to be returned by DLAMCH:
|
|
> = 'E' or 'e', DLAMCH := eps
|
|
> = 'S' or 's , DLAMCH := sfmin
|
|
> = 'B' or 'b', DLAMCH := base
|
|
> = 'P' or 'p', DLAMCH := eps*base
|
|
> = 'N' or 'n', DLAMCH := t
|
|
> = 'R' or 'r', DLAMCH := rnd
|
|
> = 'M' or 'm', DLAMCH := emin
|
|
> = 'U' or 'u', DLAMCH := rmin
|
|
> = 'L' or 'l', DLAMCH := emax
|
|
> = 'O' or 'o', DLAMCH := 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)
|
|
> \endverbatim
|
|
|
|
Authors:
|
|
========
|
|
|
|
> \author Univ. of Tennessee
|
|
> \author Univ. of California Berkeley
|
|
> \author Univ. of Colorado Denver
|
|
> \author NAG Ltd.
|
|
|
|
> \date November 2011
|
|
|
|
> \ingroup auxOTHERauxiliary
|
|
|
|
===================================================================== */
|
|
doublereal igraphdlamch_(char *cmach)
|
|
{
|
|
/* System generated locals */
|
|
doublereal ret_val;
|
|
|
|
/* Local variables */
|
|
extern doublereal radixdbl_(doublereal *), digitsdbl_(doublereal *),
|
|
epsilondbl_(doublereal *);
|
|
doublereal rnd, eps, rmach;
|
|
extern logical igraphlsame_(char *, char *);
|
|
doublereal small, sfmin;
|
|
extern integer minexponentdbl_(doublereal *), maxexponentdbl_(doublereal *
|
|
);
|
|
extern doublereal hugedbl_(doublereal *), tinydbl_(doublereal *);
|
|
|
|
|
|
/* -- LAPACK auxiliary routine (version 3.4.0) --
|
|
-- LAPACK is a software package provided by Univ. of Tennessee, --
|
|
-- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
|
November 2011
|
|
|
|
|
|
|
|
=====================================================================
|
|
|
|
|
|
|
|
Assume rounding, not chopping. Always. */
|
|
|
|
rnd = 1.;
|
|
|
|
if (1. == rnd) {
|
|
eps = epsilondbl_(&c_b2) * .5f;
|
|
} else {
|
|
eps = epsilondbl_(&c_b2);
|
|
}
|
|
|
|
if (igraphlsame_(cmach, "E")) {
|
|
rmach = eps;
|
|
} else if (igraphlsame_(cmach, "S")) {
|
|
sfmin = tinydbl_(&c_b2);
|
|
small = 1. / hugedbl_(&c_b2);
|
|
if (small >= sfmin) {
|
|
|
|
/* Use SMALL plus a bit, to avoid the possibility of rounding
|
|
causing overflow when computing 1/sfmin. */
|
|
|
|
sfmin = small * (eps + 1.);
|
|
}
|
|
rmach = sfmin;
|
|
} else if (igraphlsame_(cmach, "B")) {
|
|
rmach = radixdbl_(&c_b2);
|
|
} else if (igraphlsame_(cmach, "P")) {
|
|
rmach = eps * radixdbl_(&c_b2);
|
|
} else if (igraphlsame_(cmach, "N")) {
|
|
rmach = digitsdbl_(&c_b2);
|
|
} else if (igraphlsame_(cmach, "R")) {
|
|
rmach = rnd;
|
|
} else if (igraphlsame_(cmach, "M")) {
|
|
rmach = (doublereal) minexponentdbl_(&c_b2);
|
|
} else if (igraphlsame_(cmach, "U")) {
|
|
rmach = tinydbl_(&c_b2);
|
|
} else if (igraphlsame_(cmach, "L")) {
|
|
rmach = (doublereal) maxexponentdbl_(&c_b2);
|
|
} else if (igraphlsame_(cmach, "O")) {
|
|
rmach = hugedbl_(&c_b2);
|
|
} else {
|
|
rmach = 0.;
|
|
}
|
|
|
|
ret_val = rmach;
|
|
return ret_val;
|
|
|
|
/* End of DLAMCH */
|
|
|
|
} /* igraphdlamch_
|
|
|
|
***********************************************************************
|
|
> \brief \b DLAMC3
|
|
> \details
|
|
> \b Purpose:
|
|
> \verbatim
|
|
> DLAMC3 is intended to force A and B to be stored prior to doing
|
|
> the addition of A and B , for use in situations where optimizers
|
|
> might hold one of these in a register.
|
|
> \endverbatim
|
|
> \author LAPACK is a software package provided by Univ. of Tennessee, Univ. of California Berkeley, Univ.
|
|
of Colorado Denver and NAG Ltd..
|
|
> \date November 2011
|
|
> \ingroup auxOTHERauxiliary
|
|
>
|
|
> \param[in] A
|
|
> \verbatim
|
|
> A is a DOUBLE PRECISION
|
|
> \endverbatim
|
|
>
|
|
> \param[in] B
|
|
> \verbatim
|
|
> B is a DOUBLE PRECISION
|
|
> The values A and B.
|
|
> \endverbatim
|
|
> */
|
|
doublereal igraphdlamc3_(doublereal *a, doublereal *b)
|
|
{
|
|
/* System generated locals */
|
|
doublereal ret_val;
|
|
|
|
|
|
/* -- LAPACK auxiliary routine (version 3.4.0) --
|
|
Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
|
|
November 2010
|
|
|
|
===================================================================== */
|
|
|
|
|
|
ret_val = *a + *b;
|
|
|
|
return ret_val;
|
|
|
|
/* End of DLAMC3 */
|
|
|
|
} /* igraphdlamc3_ */
|
|
|