\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -4.6784667043225302 \cdot 10^{-32}:\\
\;\;\;\;\frac{\left(\left(\tan x + \tan \varepsilon\right) \cdot \left(1 + \tan x \cdot \tan \varepsilon\right)\right) \cdot \cos x - \left(1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right) \cdot \sin x}{\left(1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right) \cdot \cos x}\\
\mathbf{elif}\;\varepsilon \le 1.04782928541883701 \cdot 10^{-23}:\\
\;\;\;\;\left(x \cdot \varepsilon\right) \cdot \left(\varepsilon + x\right) + \varepsilon\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{1 - \tan x \cdot \tan \varepsilon}{\tan x + \tan \varepsilon}} - \tan x\\
\end{array}double f(double x, double eps) {
double r533 = x;
double r534 = eps;
double r535 = r533 + r534;
double r536 = tan(r535);
double r537 = tan(r533);
double r538 = r536 - r537;
return r538;
}
double f(double x, double eps) {
double r539 = eps;
double r540 = -4.67846670432253e-32;
bool r541 = r539 <= r540;
double r542 = x;
double r543 = tan(r542);
double r544 = tan(r539);
double r545 = r543 + r544;
double r546 = 1.0;
double r547 = r543 * r544;
double r548 = r546 + r547;
double r549 = r545 * r548;
double r550 = cos(r542);
double r551 = r549 * r550;
double r552 = r547 * r547;
double r553 = r546 - r552;
double r554 = sin(r542);
double r555 = r553 * r554;
double r556 = r551 - r555;
double r557 = r553 * r550;
double r558 = r556 / r557;
double r559 = 1.047829285418837e-23;
bool r560 = r539 <= r559;
double r561 = r542 * r539;
double r562 = r539 + r542;
double r563 = r561 * r562;
double r564 = r563 + r539;
double r565 = r546 - r547;
double r566 = r565 / r545;
double r567 = r546 / r566;
double r568 = r567 - r543;
double r569 = r560 ? r564 : r568;
double r570 = r541 ? r558 : r569;
return r570;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.6 |
|---|---|
| Target | 15.4 |
| Herbie | 15.7 |
if eps < -4.67846670432253e-32Initial program 31.0
rmApplied tan-sum2.8
rmApplied flip--2.8
Applied associate-/r/2.8
Simplified2.8
rmApplied tan-quot2.9
Applied associate-*l/2.9
Applied frac-sub2.9
if -4.67846670432253e-32 < eps < 1.047829285418837e-23Initial program 46.1
rmApplied tan-sum46.1
Taylor expanded around 0 32.3
Simplified32.0
if 1.047829285418837e-23 < eps Initial program 30.1
rmApplied tan-sum1.6
rmApplied clear-num1.7
Final simplification15.7
herbie shell --seed 2020025
(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)))