# NAG Library Routine Document

## 1Purpose

f06caf generates a complex Givens plane rotation having real cosine.

## 2Specification

Fortran Interface
 Subroutine f06caf ( a, b, c, s)
 Real (Kind=nag_wp), Intent (Out) :: c Complex (Kind=nag_wp), Intent (Inout) :: a, b Complex (Kind=nag_wp), Intent (Out) :: s
#include nagmk26.h
 void f06caf_ ( Complex *a, Complex *b, double *c, Complex *s)

## 3Description

f06caf generates a complex Givens plane rotation with parameters $c$ (real $\text{}\ge 0$) and $s$ (complex), such that, given complex $a$ and $b$:
 $c s- -s c a b = d 0 .$
If $a$ is real, then $d$ is also real. On exit, $b$ is overwritten by $t$, the tangent of the rotation; $c$ and $s$ can be reconstructed from the single stored value $t$, by a subsequent call to f06ccf.
If $\left|b\right|<\epsilon \left|a\right|$, where $\epsilon$ is the machine precision, the routine sets $c=1$ and $s=t$.
Note that $t$ is always set to $b/a$, unless overflow would occur, in which case the routine returns the value of the expression
 $CMPLX flmax × sign Reb /a , flmax × signImb / a ;$
$\mathit{flmax}$ is the real value given by $1/\left({\mathbf{x02amf}}\right)$.

None.

## 5Arguments

1:     $\mathbf{a}$ – Complex (Kind=nag_wp)Input/Output
On entry: the value $a$, the first element of the vector which determines the rotation.
On exit: the value $d$.
2:     $\mathbf{b}$ – Complex (Kind=nag_wp)Input/Output
On entry: the value $b$, the second element of the vector which determines the rotation.
On exit: the value $t$, the tangent of the rotation.
3:     $\mathbf{c}$ – Real (Kind=nag_wp)Output
On exit: the value $c$, the cosine of the rotation.
4:     $\mathbf{s}$ – Complex (Kind=nag_wp)Output
On exit: the value $s$, the sine of the rotation.

None.

Not applicable.

## 8Parallelism and Performance

f06caf is not threaded in any implementation.