\tan \left(x + \varepsilon\right) - \tan x
\mathsf{fma}\left(\frac{\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \frac{\sin \varepsilon}{\cos \varepsilon}}{\cos x}, \frac{\sin x}{1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon} \cdot \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}}, \frac{\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \mathsf{fma}\left(\frac{\sin x}{\cos x}, \frac{\sin x}{\cos x}, 1\right)}{1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon} \cdot \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}}\right) + \frac{\frac{\sin x}{1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon} \cdot \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}} - \sin x}{\cos x}double f(double x, double eps) {
double r4118140 = x;
double r4118141 = eps;
double r4118142 = r4118140 + r4118141;
double r4118143 = tan(r4118142);
double r4118144 = tan(r4118140);
double r4118145 = r4118143 - r4118144;
return r4118145;
}
double f(double x, double eps) {
double r4118146 = eps;
double r4118147 = sin(r4118146);
double r4118148 = cos(r4118146);
double r4118149 = r4118147 / r4118148;
double r4118150 = r4118149 * r4118149;
double r4118151 = x;
double r4118152 = cos(r4118151);
double r4118153 = r4118150 / r4118152;
double r4118154 = sin(r4118151);
double r4118155 = 1.0;
double r4118156 = r4118154 * r4118147;
double r4118157 = r4118152 * r4118148;
double r4118158 = r4118156 / r4118157;
double r4118159 = r4118158 * r4118158;
double r4118160 = r4118155 - r4118159;
double r4118161 = r4118154 / r4118160;
double r4118162 = r4118154 / r4118152;
double r4118163 = fma(r4118162, r4118162, r4118155);
double r4118164 = r4118149 * r4118163;
double r4118165 = r4118164 / r4118160;
double r4118166 = fma(r4118153, r4118161, r4118165);
double r4118167 = r4118161 - r4118154;
double r4118168 = r4118167 / r4118152;
double r4118169 = r4118166 + r4118168;
return r4118169;
}




Bits error versus x




Bits error versus eps
| Original | 37.3 |
|---|---|
| Target | 14.9 |
| Herbie | 0.6 |
Initial program 37.3
rmApplied tan-sum22.4
rmApplied flip--22.4
Applied associate-/r/22.4
Applied fma-neg22.4
Taylor expanded around -inf 22.6
Simplified0.6
rmApplied sub-div0.6
Final simplification0.6
herbie shell --seed 2019142 +o rules:numerics
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))