LAPACK 3.12.0 LAPACK: Linear Algebra PACKage
Searching...
No Matches
dlapy3.f
Go to the documentation of this file.
1*> \brief \b DLAPY3 returns sqrt(x2+y2+z2).
2*
3* =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6* http://www.netlib.org/lapack/explore-html/
7*
8*> \htmlonly
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 and unnecessary underflow.
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*> \ingroup lapy3
65*
66* =====================================================================
67 DOUBLE PRECISION FUNCTION dlapy3( X, Y, Z )
68*
69* -- LAPACK auxiliary routine --
70* -- LAPACK is a software package provided by Univ. of Tennessee, --
71* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
72*
73* .. Scalar Arguments ..
74 DOUBLE PRECISION x, y, z
75* ..
76*
77* =====================================================================
78*
79* .. Parameters ..
80 DOUBLE PRECISION zero
81 parameter( zero = 0.0d0 )
82* ..
83* .. Local Scalars ..
84 DOUBLE PRECISION w, xabs, yabs, zabs, hugeval
85* ..
86* .. External Subroutines ..
87 DOUBLE PRECISION dlamch
88* ..
89* .. Intrinsic Functions ..
90 INTRINSIC abs, max, sqrt
91* ..
92* .. Executable Statements ..
93*
94 hugeval = dlamch( 'Overflow' )
95 xabs = abs( x )
96 yabs = abs( y )
97 zabs = abs( z )
98 w = max( xabs, yabs, zabs )
99 IF( w.EQ.zero .OR. w.GT.hugeval ) THEN
100* W can be zero for max(0,nan,0)
101* adding all three entries together will make sure
102* NaN will not disappear.
103 dlapy3 = xabs + yabs + zabs
104 ELSE
105 dlapy3 = w*sqrt( ( xabs / w )**2+( yabs / w )**2+
106 \$ ( zabs / w )**2 )
107 END IF
108 RETURN
109*
110* End of DLAPY3
111*
112 END
double precision function dlamch(cmach)
DLAMCH
Definition dlamch.f:69
double precision function dlapy3(x, y, z)
DLAPY3 returns sqrt(x2+y2+z2).
Definition dlapy3.f:68
program zabs
zabs tests the robustness and precision of the intrinsic ABS for double complex