\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -8.40451542959736362 \cdot 10^{-107} \lor \neg \left(\varepsilon \le 1.5951375447724633 \cdot 10^{-59}\right):\\
\;\;\;\;1 \cdot \frac{\tan x + \tan \varepsilon}{1 - \frac{\left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \sin \varepsilon\right)}{\cos \varepsilon}} + \tan x \cdot \left(\tan \varepsilon \cdot \frac{\tan x + \tan \varepsilon}{1 - \frac{\left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \sin \varepsilon\right)}{\cos \varepsilon}} - 1\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\varepsilon \cdot x\right) \cdot \left(x + \varepsilon\right) + \varepsilon\\
\end{array}double f(double x, double eps) {
double r133093 = x;
double r133094 = eps;
double r133095 = r133093 + r133094;
double r133096 = tan(r133095);
double r133097 = tan(r133093);
double r133098 = r133096 - r133097;
return r133098;
}
double f(double x, double eps) {
double r133099 = eps;
double r133100 = -8.404515429597364e-107;
bool r133101 = r133099 <= r133100;
double r133102 = 1.5951375447724633e-59;
bool r133103 = r133099 <= r133102;
double r133104 = !r133103;
bool r133105 = r133101 || r133104;
double r133106 = 1.0;
double r133107 = x;
double r133108 = tan(r133107);
double r133109 = tan(r133099);
double r133110 = r133108 + r133109;
double r133111 = r133108 * r133109;
double r133112 = sin(r133099);
double r133113 = r133108 * r133112;
double r133114 = r133111 * r133113;
double r133115 = cos(r133099);
double r133116 = r133114 / r133115;
double r133117 = r133106 - r133116;
double r133118 = r133110 / r133117;
double r133119 = r133106 * r133118;
double r133120 = r133109 * r133118;
double r133121 = r133120 - r133106;
double r133122 = r133108 * r133121;
double r133123 = r133119 + r133122;
double r133124 = r133099 * r133107;
double r133125 = r133107 + r133099;
double r133126 = r133124 * r133125;
double r133127 = r133126 + r133099;
double r133128 = r133105 ? r133123 : r133127;
return r133128;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.7 |
|---|---|
| Target | 15.1 |
| Herbie | 15.3 |
if eps < -8.404515429597364e-107 or 1.5951375447724633e-59 < eps Initial program 30.2
rmApplied tan-sum6.3
rmApplied flip--6.4
Applied associate-/r/6.4
Simplified6.4
rmApplied tan-quot6.4
Applied associate-*r/6.4
Applied associate-*r/6.4
rmApplied distribute-rgt-in6.4
Applied associate--l+6.4
Simplified6.4
if -8.404515429597364e-107 < eps < 1.5951375447724633e-59Initial program 48.1
Taylor expanded around 0 31.0
Simplified30.8
Final simplification15.3
herbie shell --seed 2020089
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:precision binary64
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))