CLARTG(3)

πŸ“¦ version 3.12.0, in opensuse-leap 16.0

πŸ¦‹ CLARTG πŸ¦‹ (that's clartg.f90(3), from the Library Functions Manual bestie)

okay so real talk β€” we're in the LAPACK cinematic universe today and this whole page lives at clartg.f90(3) in the Library Functions Manual. stay with me, it's giving math but make it cute πŸ’…


✨ NAME ✨

the file in question, in all its absolute-path glory:

/home/abuild/rpmbuild/BUILD/lapack-
static-3.12.0-build/lapack-3.12.0/SRC/clartg.f90

like yes she's a whole path, she contains multitudes πŸŽ€


✨ SYNOPSIS ✨

Functions/Subroutines

  • subroutine CLARTG (f, g, c, s, r) β€” CLARTG generates a plane rotation with real cosine and complex sine. periodt. that's the whole vibe πŸ”₯

✨ Function/Subroutine 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. no cap 🫢

🌸 Purpose:

lowkey the whole point is this β€” 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. (that's the vibe check that keeps everything normalized ✨)

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, bestie, memorize these:

   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. (yes she's consistent, we stan a predictable queen πŸ‘‘)

The algorithm used to compute these quantities incorporates scaling to avoid overflow or underflow in computing the square root of the sum of squares. like literally, she's out here protecting you from the numerical void 😭

This is the same routine CROTG fom BLAS1, except that F and G are unchanged on return. main character behaviour tbh.

Below, wp=>sp stands for single precision from the LA_CONSTANTS module. iykyk 🧚


✨ Parameters ✨

F

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

the first component of vector to be rotated, she's the opener πŸ’–

G

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

the second component of vector to be rotated β€” the sequel, and honestly? she ate πŸ“

C

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

the cosine of the rotation, and yes she's REAL (literally) ⭐

S

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

the sine of the rotation, complex and thriving πŸ¦‹

R

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

the nonzero component of the rotated vector. the one that actually shows up πŸ’€βœ¨


✨ Author ✨

Weslley Pereira, University of Colorado Denver, USA. legend behaviour, we salute πŸ«‘πŸ’œ


✨ Date ✨

December 2021. vintage but still slaying πŸŽ€


✨ 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

that's the receipts, the citation, the whole bibliography moment πŸ“šπŸ’…


ngl the definition is sitting at line 115 of file clartg.f90. that's where the magic happens, bestie.

✨ Author (the meta one) ✨

Generated automatically by Doxygen for LAPACK from the source code. (not a human, just a very diligent little robot πŸ§šβ€β™€οΈ)


and that's the page!! no notes, she's iconic, she's scaled safely, she's not overflowing into your DMs πŸ’…βœ¨

sign-off szn: this was LAPACK, Version 3.12.0, dated December 2021 β€” courtesy of /home/abui.../clartg.f90(3). mwah, go rotate something. πŸŽ€πŸ’–

πŸ“¦ where this page comes from