LAPACK 3.12.0 LAPACK: Linear Algebra PACKage
Searching...
No Matches

## ◆ slartg()

 subroutine slartg ( real(wp) f, real(wp) g, real(wp) c, real(wp) s, real(wp) r )

SLARTG generates a plane rotation with real cosine and real sine.

Purpose:
``` SLARTG generates a plane rotation so that

[  C  S  ]  .  [ F ]  =  [ R ]
[ -S  C  ]     [ G ]     [ 0 ]

where C**2 + S**2 = 1.

The mathematical formulas used for C and S are
R = sign(F) * sqrt(F**2 + G**2)
C = F / R
S = G / R
Hence C >= 0. The algorithm used to compute these quantities
incorporates scaling to avoid overflow or underflow in computing the
square root of the sum of squares.

This version is discontinuous in R at F = 0 but it returns the same
C and S as CLARTG for complex inputs (F,0) and (G,0).

This is a more accurate version of the BLAS1 routine SROTG,
with the following other differences:
F and G are unchanged on return.
If G=0, then C=1 and S=0.
If F=0 and (G .ne. 0), then C=0 and S=sign(1,G) without doing any
floating point operations (saves work in SBDSQR when
there are zeros on the diagonal).

Below, wp=>sp stands for single precision from LA_CONSTANTS module.```
Parameters
 [in] F ``` F is REAL(wp) The first component of vector to be rotated.``` [in] G ``` G is REAL(wp) The second component of vector to be rotated.``` [out] C ``` C is REAL(wp) The cosine of the rotation.``` [out] S ``` S is REAL(wp) The sine of the rotation.``` [out] R ``` R is REAL(wp) The nonzero component of the rotated vector.```
Date
July 2016
Contributors:
Weslley Pereira, University of Colorado Denver, USA
Further Details:
```  Anderson E. (2017)
Algorithm 978: Safe Scaling in the Level 1 BLAS
ACM Trans Math Softw 44:1--28
https://doi.org/10.1145/3061665```

Definition at line 110 of file slartg.f90.

111 use la_constants, &
112 only: wp=>sp, zero=>szero, half=>shalf, one=>sone, &
113 safmin=>ssafmin, safmax=>ssafmax
114!
115! -- LAPACK auxiliary routine --
116! -- LAPACK is a software package provided by Univ. of Tennessee, --
117! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
118! February 2021
119!
120! .. Scalar Arguments ..
121 real(wp) :: c, f, g, r, s
122! ..
123! .. Local Scalars ..
124 real(wp) :: d, f1, fs, g1, gs, u, rtmin, rtmax
125! ..
126! .. Intrinsic Functions ..
127 intrinsic :: abs, sign, sqrt
128! ..
129! .. Constants ..
130 rtmin = sqrt( safmin )
131 rtmax = sqrt( safmax/2 )
132! ..
133! .. Executable Statements ..
134!
135 f1 = abs( f )
136 g1 = abs( g )
137 if( g == zero ) then
138 c = one
139 s = zero
140 r = f
141 else if( f == zero ) then
142 c = zero
143 s = sign( one, g )
144 r = g1
145 else if( f1 > rtmin .and. f1 < rtmax .and. &
146 g1 > rtmin .and. g1 < rtmax ) then
147 d = sqrt( f*f + g*g )
148 c = f1 / d
149 r = sign( d, f )
150 s = g / r
151 else
152 u = min( safmax, max( safmin, f1, g1 ) )
153 fs = f / u
154 gs = g / u
155 d = sqrt( fs*fs + gs*gs )
156 c = abs( fs ) / d
157 r = sign( d, f )
158 s = gs / r
159 r = r*u
160 end if
161 return
real(sp), parameter sone
real(sp), parameter shalf
integer, parameter sp
real(sp), parameter ssafmin
real(sp), parameter ssafmax
real(sp), parameter szero
LA_CONSTANTS is a module for the scaling constants for the compiled Fortran single and double precisi...
Here is the caller graph for this function: