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