srotg(3f) - [BLAS:SINGLE_BLAS_LEVEL1] Generate Given's rotation.
subroutine srotg( a, b, c, s )
.. Scalar Arguments ..
real(wp),intent(inout) :: a, b
real(wp),intent(out) :: c, s
..
.. Local Scalars ..
real(wp) :: anorm, bnorm, scl, sigma, r, z
..
SROTG constructs a plane rotation
[ c s ] [ a ] = [ r ]
[ -s c ] [ b ] [ 0 ]
satisfying c2 + s2 = 1.
The computation uses the formulas
sigma = sgn(a) if |a| > |b|
= sgn(b) if |b| >= |a|
r = sigma*sqrt( a**2 + b**2 )
c = 1; s = 0 if r = 0
c = a/r; s = b/r if r != 0
The subroutine also computes
z = s if |a| > |b|,
= 1/c if |b| >= |a| and c != 0
= 1 if c = 0
This allows c and s to be reconstructed from z as follows:
If z = 1, set c = 0, s = 1.
If |z| < 1, set c = sqrt(1 - z**2) and s = z.
If |z| > 1, set c = 1/z and s = sqrt( 1 - c**2).
A
A is REAL
On entry, the scalar a.
On exit, the scalar r.
B
B is REAL
On entry, the scalar b.
On exit, the scalar z.
C
C is REAL
The scalar c.
S
S is REAL
The scalar s.
\par 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
Online html documentation available at
http://www.netlib.org/lapack/explore-html/
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(inout) | :: | a | |||
real(kind=wp), | intent(inout) | :: | b | |||
real(kind=wp), | intent(out) | :: | c | |||
real(kind=wp), | intent(out) | :: | s |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
real(kind=wp), | public | :: | anorm | ||||
real(kind=wp), | public | :: | bnorm | ||||
real(kind=wp), | public, | parameter | :: | one | = | 1.0_wp | |
real(kind=wp), | public | :: | r | ||||
real(kind=wp), | public, | parameter | :: | safmax | = | real(radix(0._wp), wp)**max(1-minexponent(0._wp), maxexponent(0._wp)-1) | |
real(kind=wp), | public, | parameter | :: | safmin | = | real(radix(0._wp), wp)**max(minexponent(0._wp)-1, 1-maxexponent(0._wp)) | |
real(kind=wp), | public | :: | scl | ||||
real(kind=wp), | public | :: | sigma | ||||
integer, | public, | parameter | :: | wp | = | kind(1.e0) | |
real(kind=wp), | public | :: | z | ||||
real(kind=wp), | public, | parameter | :: | zero | = | 0.0_wp |