Average Error: 0.3 → 0.3
Time: 8.9s
Precision: binary64
\[\frac{1 - \tan x \cdot \tan x}{1 + \tan x \cdot \tan x} \]
\[\begin{array}{l} t_0 := {\tan x}^{2}\\ \frac{1 - t_0}{\mathsf{fma}\left(t_0, 1, 1\right)} \end{array} \]
\frac{1 - \tan x \cdot \tan x}{1 + \tan x \cdot \tan x}
\begin{array}{l}
t_0 := {\tan x}^{2}\\
\frac{1 - t_0}{\mathsf{fma}\left(t_0, 1, 1\right)}
\end{array}
(FPCore (x)
 :precision binary64
 (/ (- 1.0 (* (tan x) (tan x))) (+ 1.0 (* (tan x) (tan x)))))
(FPCore (x)
 :precision binary64
 (let* ((t_0 (pow (tan x) 2.0))) (/ (- 1.0 t_0) (fma t_0 1.0 1.0))))
double code(double x) {
	return (1.0 - (tan(x) * tan(x))) / (1.0 + (tan(x) * tan(x)));
}
double code(double x) {
	double t_0 = pow(tan(x), 2.0);
	return (1.0 - t_0) / fma(t_0, 1.0, 1.0);
}

Error

Bits error versus x

Derivation

  1. Initial program 0.3

    \[\frac{1 - \tan x \cdot \tan x}{1 + \tan x \cdot \tan x} \]
  2. Applied egg-rr0.3

    \[\leadsto \frac{1 - \tan x \cdot \tan x}{\color{blue}{\mathsf{fma}\left({\tan x}^{2}, 1, 1\right)}} \]
  3. Applied egg-rr0.3

    \[\leadsto \frac{1 - \color{blue}{{\tan x}^{2}}}{\mathsf{fma}\left({\tan x}^{2}, 1, 1\right)} \]
  4. Final simplification0.3

    \[\leadsto \frac{1 - {\tan x}^{2}}{\mathsf{fma}\left({\tan x}^{2}, 1, 1\right)} \]

Reproduce

herbie shell --seed 2022129 
(FPCore (x)
  :name "Trigonometry B"
  :precision binary64
  (/ (- 1.0 (* (tan x) (tan x))) (+ 1.0 (* (tan x) (tan x)))))