xref: /aosp_15_r20/external/eigen/lapack/dlapy3.f (revision bf2c37156dfe67e5dfebd6d394bad8b2ab5804d4)
1*bf2c3715SXin Li*> \brief \b DLAPY3
2*bf2c3715SXin Li*
3*bf2c3715SXin Li*  =========== DOCUMENTATION ===========
4*bf2c3715SXin Li*
5*bf2c3715SXin Li* Online html documentation available at
6*bf2c3715SXin Li*            http://www.netlib.org/lapack/explore-html/
7*bf2c3715SXin Li*
8*bf2c3715SXin Li*> \htmlonly
9*bf2c3715SXin Li*> Download DLAPY3 + dependencies
10*bf2c3715SXin Li*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlapy3.f">
11*bf2c3715SXin Li*> [TGZ]</a>
12*bf2c3715SXin Li*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlapy3.f">
13*bf2c3715SXin Li*> [ZIP]</a>
14*bf2c3715SXin Li*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapy3.f">
15*bf2c3715SXin Li*> [TXT]</a>
16*bf2c3715SXin Li*> \endhtmlonly
17*bf2c3715SXin Li*
18*bf2c3715SXin Li*  Definition:
19*bf2c3715SXin Li*  ===========
20*bf2c3715SXin Li*
21*bf2c3715SXin Li*       DOUBLE PRECISION FUNCTION DLAPY3( X, Y, Z )
22*bf2c3715SXin Li*
23*bf2c3715SXin Li*       .. Scalar Arguments ..
24*bf2c3715SXin Li*       DOUBLE PRECISION   X, Y, Z
25*bf2c3715SXin Li*       ..
26*bf2c3715SXin Li*
27*bf2c3715SXin Li*
28*bf2c3715SXin Li*> \par Purpose:
29*bf2c3715SXin Li*  =============
30*bf2c3715SXin Li*>
31*bf2c3715SXin Li*> \verbatim
32*bf2c3715SXin Li*>
33*bf2c3715SXin Li*> DLAPY3 returns sqrt(x**2+y**2+z**2), taking care not to cause
34*bf2c3715SXin Li*> unnecessary overflow.
35*bf2c3715SXin Li*> \endverbatim
36*bf2c3715SXin Li*
37*bf2c3715SXin Li*  Arguments:
38*bf2c3715SXin Li*  ==========
39*bf2c3715SXin Li*
40*bf2c3715SXin Li*> \param[in] X
41*bf2c3715SXin Li*> \verbatim
42*bf2c3715SXin Li*>          X is DOUBLE PRECISION
43*bf2c3715SXin Li*> \endverbatim
44*bf2c3715SXin Li*>
45*bf2c3715SXin Li*> \param[in] Y
46*bf2c3715SXin Li*> \verbatim
47*bf2c3715SXin Li*>          Y is DOUBLE PRECISION
48*bf2c3715SXin Li*> \endverbatim
49*bf2c3715SXin Li*>
50*bf2c3715SXin Li*> \param[in] Z
51*bf2c3715SXin Li*> \verbatim
52*bf2c3715SXin Li*>          Z is DOUBLE PRECISION
53*bf2c3715SXin Li*>          X, Y and Z specify the values x, y and z.
54*bf2c3715SXin Li*> \endverbatim
55*bf2c3715SXin Li*
56*bf2c3715SXin Li*  Authors:
57*bf2c3715SXin Li*  ========
58*bf2c3715SXin Li*
59*bf2c3715SXin Li*> \author Univ. of Tennessee
60*bf2c3715SXin Li*> \author Univ. of California Berkeley
61*bf2c3715SXin Li*> \author Univ. of Colorado Denver
62*bf2c3715SXin Li*> \author NAG Ltd.
63*bf2c3715SXin Li*
64*bf2c3715SXin Li*> \date November 2011
65*bf2c3715SXin Li*
66*bf2c3715SXin Li*> \ingroup auxOTHERauxiliary
67*bf2c3715SXin Li*
68*bf2c3715SXin Li*  =====================================================================
69*bf2c3715SXin Li      DOUBLE PRECISION FUNCTION DLAPY3( X, Y, Z )
70*bf2c3715SXin Li*
71*bf2c3715SXin Li*  -- LAPACK auxiliary routine (version 3.4.0) --
72*bf2c3715SXin Li*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
73*bf2c3715SXin Li*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
74*bf2c3715SXin Li*     November 2011
75*bf2c3715SXin Li*
76*bf2c3715SXin Li*     .. Scalar Arguments ..
77*bf2c3715SXin Li      DOUBLE PRECISION   X, Y, Z
78*bf2c3715SXin Li*     ..
79*bf2c3715SXin Li*
80*bf2c3715SXin Li*  =====================================================================
81*bf2c3715SXin Li*
82*bf2c3715SXin Li*     .. Parameters ..
83*bf2c3715SXin Li      DOUBLE PRECISION   ZERO
84*bf2c3715SXin Li      PARAMETER          ( ZERO = 0.0D0 )
85*bf2c3715SXin Li*     ..
86*bf2c3715SXin Li*     .. Local Scalars ..
87*bf2c3715SXin Li      DOUBLE PRECISION   W, XABS, YABS, ZABS
88*bf2c3715SXin Li*     ..
89*bf2c3715SXin Li*     .. Intrinsic Functions ..
90*bf2c3715SXin Li      INTRINSIC          ABS, MAX, SQRT
91*bf2c3715SXin Li*     ..
92*bf2c3715SXin Li*     .. Executable Statements ..
93*bf2c3715SXin Li*
94*bf2c3715SXin Li      XABS = ABS( X )
95*bf2c3715SXin Li      YABS = ABS( Y )
96*bf2c3715SXin Li      ZABS = ABS( Z )
97*bf2c3715SXin Li      W = MAX( XABS, YABS, ZABS )
98*bf2c3715SXin Li      IF( W.EQ.ZERO ) THEN
99*bf2c3715SXin Li*     W can be zero for max(0,nan,0)
100*bf2c3715SXin Li*     adding all three entries together will make sure
101*bf2c3715SXin Li*     NaN will not disappear.
102*bf2c3715SXin Li         DLAPY3 =  XABS + YABS + ZABS
103*bf2c3715SXin Li      ELSE
104*bf2c3715SXin Li         DLAPY3 = W*SQRT( ( XABS / W )**2+( YABS / W )**2+
105*bf2c3715SXin Li     $            ( ZABS / W )**2 )
106*bf2c3715SXin Li      END IF
107*bf2c3715SXin Li      RETURN
108*bf2c3715SXin Li*
109*bf2c3715SXin Li*     End of DLAPY3
110*bf2c3715SXin Li*
111*bf2c3715SXin Li      END
112