103 DOUBLE PRECISION CS, F, G, R, SN
109 DOUBLE PRECISION ZERO
110 parameter( zero = 0.0d0 )
112 parameter( one = 1.0d0 )
114 parameter( two = 2.0d0 )
119 DOUBLE PRECISION EPS, F1, G1, SAFMIN, SAFMN2, SAFMX2, SCALE
122 DOUBLE PRECISION DLAMCH
126 INTRINSIC abs, int, log, max, sqrt
137 safmin = dlamch(
'S' )
139 safmn2 = dlamch(
'B' )**int( log( safmin / eps ) /
140 $ log( dlamch(
'B' ) ) / two )
141 safmx2 = one / safmn2
148 ELSE IF( f.EQ.zero )
THEN
155 scale = max( abs( f1 ), abs( g1 ) )
156 IF( scale.GE.safmx2 )
THEN
162 scale = max( abs( f1 ), abs( g1 ) )
163 IF( scale.GE.safmx2 .AND. count .LT. 20)
165 r = sqrt( f1**2+g1**2 )
171 ELSE IF( scale.LE.safmn2 )
THEN
177 scale = max( abs( f1 ), abs( g1 ) )
178 IF( scale.LE.safmn2 )
180 r = sqrt( f1**2+g1**2 )
187 r = sqrt( f1**2+g1**2 )
191 IF( abs( f ).GT.abs( g ) .AND. cs.LT.zero )
THEN
subroutine dlartg(F, G, CS, SN, R)
DLARTG generates a plane rotation with real cosine and real sine.