\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -7.287696018930271589233211764394565863653 \cdot 10^{-45} \lor \neg \left(\varepsilon \le 3.567141279375676635666856121536066364286 \cdot 10^{-32}\right):\\
\;\;\;\;\frac{\tan x + \tan \varepsilon}{1 - \sqrt[3]{{\left(\tan x \cdot \tan \varepsilon\right)}^{3}}} - \tan x\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \varepsilon\right) \cdot \left(x + \varepsilon\right) + \varepsilon\\
\end{array}double f(double x, double eps) {
double r108648 = x;
double r108649 = eps;
double r108650 = r108648 + r108649;
double r108651 = tan(r108650);
double r108652 = tan(r108648);
double r108653 = r108651 - r108652;
return r108653;
}
double f(double x, double eps) {
double r108654 = eps;
double r108655 = -7.287696018930272e-45;
bool r108656 = r108654 <= r108655;
double r108657 = 3.5671412793756766e-32;
bool r108658 = r108654 <= r108657;
double r108659 = !r108658;
bool r108660 = r108656 || r108659;
double r108661 = x;
double r108662 = tan(r108661);
double r108663 = tan(r108654);
double r108664 = r108662 + r108663;
double r108665 = 1.0;
double r108666 = r108662 * r108663;
double r108667 = 3.0;
double r108668 = pow(r108666, r108667);
double r108669 = cbrt(r108668);
double r108670 = r108665 - r108669;
double r108671 = r108664 / r108670;
double r108672 = r108671 - r108662;
double r108673 = r108661 * r108654;
double r108674 = r108661 + r108654;
double r108675 = r108673 * r108674;
double r108676 = r108675 + r108654;
double r108677 = r108660 ? r108672 : r108676;
return r108677;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.3 |
|---|---|
| Target | 15.5 |
| Herbie | 15.7 |
if eps < -7.287696018930272e-45 or 3.5671412793756766e-32 < eps Initial program 30.4
rmApplied tan-sum3.2
rmApplied add-cbrt-cube3.2
Applied add-cbrt-cube3.2
Applied cbrt-unprod3.2
Simplified3.2
if -7.287696018930272e-45 < eps < 3.5671412793756766e-32Initial program 46.5
Taylor expanded around 0 32.4
Simplified32.1
Final simplification15.7
herbie shell --seed 2019322
(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)))