# lartg - Man Page

lartg: generate plane rotation, more accurate than BLAS rot

## Synopsis

### Functions

subroutine **clartg** (f, g, c, s, r)**CLARTG** generates a plane rotation with real cosine and complex sine.

subroutine **dlartg** (f, g, c, s, r)**DLARTG** generates a plane rotation with real cosine and real sine.

subroutine **slartg** (f, g, c, s, r)**SLARTG** generates a plane rotation with real cosine and real sine.

subroutine **zlartg** (f, g, c, s, r)**ZLARTG** generates a plane rotation with real cosine and complex sine.

## Detailed Description

## Function Documentation

### subroutine clartg (complex(wp) f, complex(wp) g, real(wp) c, complex(wp) s, complex(wp) r)

**CLARTG** generates a plane rotation with real cosine and complex sine.

**Purpose:**

CLARTG generates a plane rotation so that [ C S ] . [ F ] = [ R ] [ -conjg(S) C ] [ G ] [ 0 ] where C is real and C**2 + |S|**2 = 1. The mathematical formulas used for C and S are sgn(x) = { x / |x|, x != 0 { 1, x = 0 R = sgn(F) * sqrt(|F|**2 + |G|**2) C = |F| / sqrt(|F|**2 + |G|**2) S = sgn(F) * conjg(G) / sqrt(|F|**2 + |G|**2) Special conditions: If G=0, then C=1 and S=0. If F=0, then C=0 and S is chosen so that R is real. When F and G are real, the formulas simplify to C = F/R and S = G/R, and the returned values of C, S, and R should be identical to those returned by SLARTG. 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 is the same routine CROTG fom BLAS1, except that F and G are unchanged on return. Below, wp=>sp stands for single precision from LA_CONSTANTS module.

**Parameters***F*F is COMPLEX(wp) The first component of vector to be rotated.

*G*G is COMPLEX(wp) The second component of vector to be rotated.

*C*C is REAL(wp) The cosine of the rotation.

*S*S is COMPLEX(wp) The sine of the rotation.

*R*R is COMPLEX(wp) The nonzero component of the rotated vector.

**Author**Weslley Pereira, University of Colorado Denver, USA

**Date**December 2021

**Further Details:**

Based on the algorithm from 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 **115** of file **clartg.f90**.

### subroutine dlartg (real(wp) f, real(wp) g, real(wp) c, real(wp) s, real(wp) r)

**DLARTG** generates a plane rotation with real cosine and real sine.

**Purpose:**

DLARTG 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 ZLARTG for complex inputs (F,0) and (G,0). This is a more accurate version of the BLAS1 routine DROTG, 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 DBDSQR when there are zeros on the diagonal). Below, wp=>dp stands for double precision from LA_CONSTANTS module.

**Parameters***F*F is REAL(wp) The first component of vector to be rotated.

*G*G is REAL(wp) The second component of vector to be rotated.

*C*C is REAL(wp) The cosine of the rotation.

*S*S is REAL(wp) The sine of the rotation.

*R*R is REAL(wp) The nonzero component of the rotated vector.

**Author**Edward Anderson, Lockheed Martin

**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 **dlartg.f90**.

### 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***F*F is REAL(wp) The first component of vector to be rotated.

*G*G is REAL(wp) The second component of vector to be rotated.

*C*C is REAL(wp) The cosine of the rotation.

*S*S is REAL(wp) The sine of the rotation.

*R*R is REAL(wp) The nonzero component of the rotated vector.

**Author**Edward Anderson, Lockheed Martin

**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**.

### subroutine zlartg (complex(wp) f, complex(wp) g, real(wp) c, complex(wp) s, complex(wp) r)

**ZLARTG** generates a plane rotation with real cosine and complex sine.

**Purpose:**

ZLARTG generates a plane rotation so that [ C S ] . [ F ] = [ R ] [ -conjg(S) C ] [ G ] [ 0 ] where C is real and C**2 + |S|**2 = 1. The mathematical formulas used for C and S are sgn(x) = { x / |x|, x != 0 { 1, x = 0 R = sgn(F) * sqrt(|F|**2 + |G|**2) C = |F| / sqrt(|F|**2 + |G|**2) S = sgn(F) * conjg(G) / sqrt(|F|**2 + |G|**2) Special conditions: If G=0, then C=1 and S=0. If F=0, then C=0 and S is chosen so that R is real. When F and G are real, the formulas simplify to C = F/R and S = G/R, and the returned values of C, S, and R should be identical to those returned by DLARTG. 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 is the same routine ZROTG fom BLAS1, except that F and G are unchanged on return. Below, wp=>dp stands for double precision from LA_CONSTANTS module.

**Parameters***F*F is COMPLEX(wp) The first component of vector to be rotated.

*G*G is COMPLEX(wp) The second component of vector to be rotated.

*C*C is REAL(wp) The cosine of the rotation.

*S*S is COMPLEX(wp) The sine of the rotation.

*R*R is COMPLEX(wp) The nonzero component of the rotated vector.

**Author**Weslley Pereira, University of Colorado Denver, USA

**Date**December 2021

**Further Details:**

Based on the algorithm from 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 **115** of file **zlartg.f90**.

## Author

Generated automatically by Doxygen for LAPACK from the source code.