\tan \left(x + \varepsilon\right) - \tan x
\left(\tan x - \tan x\right) + \mathsf{fma}\left(\left(\tan \varepsilon \cdot \tan x\right), \left(\frac{\tan x + \tan \varepsilon}{1 - \left(\tan \varepsilon \cdot \tan x\right) \cdot \left(\tan \varepsilon \cdot \tan x\right)}\right), \left(\left(\mathsf{fma}\left(\left(\frac{\sin x \cdot \sin x}{\cos x \cdot \cos x} \cdot \frac{\sin x \cdot \sin x}{\cos x \cdot \cos x}\right), \left(\frac{\frac{{\left(\sin \varepsilon\right)}^{5}}{{\left(\cos \varepsilon\right)}^{5}}}{1 - \left(\frac{\sin \varepsilon \cdot \left(\sin \varepsilon \cdot \sin \varepsilon\right)}{\cos \varepsilon \cdot \left(\cos \varepsilon \cdot \cos \varepsilon\right)} \cdot \frac{\sin \varepsilon \cdot \left(\sin \varepsilon \cdot \sin \varepsilon\right)}{\cos \varepsilon \cdot \left(\cos \varepsilon \cdot \cos \varepsilon\right)}\right) \cdot \left(\frac{\sin x \cdot \left(\sin x \cdot \sin x\right)}{\left(\cos x \cdot \cos x\right) \cdot \cos x} \cdot \frac{\sin x \cdot \left(\sin x \cdot \sin x\right)}{\left(\cos x \cdot \cos x\right) \cdot \cos x}\right)}\right), \left(\mathsf{fma}\left(\left(\frac{{\left(\sin x\right)}^{5}}{{\left(\cos x\right)}^{5}}\right), \left(\frac{\frac{\left(\sin \varepsilon \cdot \sin \varepsilon\right) \cdot \left(\sin \varepsilon \cdot \sin \varepsilon\right)}{\left(\cos \varepsilon \cdot \cos \varepsilon\right) \cdot \left(\cos \varepsilon \cdot \cos \varepsilon\right)}}{1 - \left(\frac{\sin \varepsilon \cdot \left(\sin \varepsilon \cdot \sin \varepsilon\right)}{\cos \varepsilon \cdot \left(\cos \varepsilon \cdot \cos \varepsilon\right)} \cdot \frac{\sin \varepsilon \cdot \left(\sin \varepsilon \cdot \sin \varepsilon\right)}{\cos \varepsilon \cdot \left(\cos \varepsilon \cdot \cos \varepsilon\right)}\right) \cdot \left(\frac{\sin x \cdot \left(\sin x \cdot \sin x\right)}{\left(\cos x \cdot \cos x\right) \cdot \cos x} \cdot \frac{\sin x \cdot \left(\sin x \cdot \sin x\right)}{\left(\cos x \cdot \cos x\right) \cdot \cos x}\right)}\right), \left(\frac{\sin x \cdot \left(\sin x \cdot \sin x\right)}{\left(\cos x \cdot \cos x\right) \cdot \cos x} \cdot \frac{\frac{\sin \varepsilon \cdot \sin \varepsilon}{\cos \varepsilon \cdot \cos \varepsilon}}{1 - \left(\frac{\sin \varepsilon \cdot \left(\sin \varepsilon \cdot \sin \varepsilon\right)}{\cos \varepsilon \cdot \left(\cos \varepsilon \cdot \cos \varepsilon\right)} \cdot \frac{\sin \varepsilon \cdot \left(\sin \varepsilon \cdot \sin \varepsilon\right)}{\cos \varepsilon \cdot \left(\cos \varepsilon \cdot \cos \varepsilon\right)}\right) \cdot \left(\frac{\sin x \cdot \left(\sin x \cdot \sin x\right)}{\left(\cos x \cdot \cos x\right) \cdot \cos x} \cdot \frac{\sin x \cdot \left(\sin x \cdot \sin x\right)}{\left(\cos x \cdot \cos x\right) \cdot \cos x}\right)}\right)\right)\right)\right) + \left(\frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \left(\frac{\sin \varepsilon \cdot \left(\sin \varepsilon \cdot \sin \varepsilon\right)}{\cos \varepsilon \cdot \left(\cos \varepsilon \cdot \cos \varepsilon\right)} \cdot \frac{\sin \varepsilon \cdot \left(\sin \varepsilon \cdot \sin \varepsilon\right)}{\cos \varepsilon \cdot \left(\cos \varepsilon \cdot \cos \varepsilon\right)}\right) \cdot \left(\frac{\sin x \cdot \left(\sin x \cdot \sin x\right)}{\left(\cos x \cdot \cos x\right) \cdot \cos x} \cdot \frac{\sin x \cdot \left(\sin x \cdot \sin x\right)}{\left(\cos x \cdot \cos x\right) \cdot \cos x}\right)} + \frac{\sin x \cdot \sin x}{\left(1 - \left(\frac{\sin \varepsilon \cdot \left(\sin \varepsilon \cdot \sin \varepsilon\right)}{\cos \varepsilon \cdot \left(\cos \varepsilon \cdot \cos \varepsilon\right)} \cdot \frac{\sin \varepsilon \cdot \left(\sin \varepsilon \cdot \sin \varepsilon\right)}{\cos \varepsilon \cdot \left(\cos \varepsilon \cdot \cos \varepsilon\right)}\right) \cdot \left(\frac{\sin x \cdot \left(\sin x \cdot \sin x\right)}{\left(\cos x \cdot \cos x\right) \cdot \cos x} \cdot \frac{\sin x \cdot \left(\sin x \cdot \sin x\right)}{\left(\cos x \cdot \cos x\right) \cdot \cos x}\right)\right) \cdot \left(\cos x \cdot \cos x\right)} \cdot \frac{\sin \varepsilon \cdot \left(\sin \varepsilon \cdot \sin \varepsilon\right)}{\cos \varepsilon \cdot \left(\cos \varepsilon \cdot \cos \varepsilon\right)}\right)\right) + \left(\frac{\frac{\sin x}{\cos x}}{1 - \left(\frac{\sin \varepsilon \cdot \left(\sin \varepsilon \cdot \sin \varepsilon\right)}{\cos \varepsilon \cdot \left(\cos \varepsilon \cdot \cos \varepsilon\right)} \cdot \frac{\sin \varepsilon \cdot \left(\sin \varepsilon \cdot \sin \varepsilon\right)}{\cos \varepsilon \cdot \left(\cos \varepsilon \cdot \cos \varepsilon\right)}\right) \cdot \left(\frac{\sin x \cdot \left(\sin x \cdot \sin x\right)}{\left(\cos x \cdot \cos x\right) \cdot \cos x} \cdot \frac{\sin x \cdot \left(\sin x \cdot \sin x\right)}{\left(\cos x \cdot \cos x\right) \cdot \cos x}\right)} - \frac{\sin x}{\cos x}\right)\right)\right)double f(double x, double eps) {
double r17612624 = x;
double r17612625 = eps;
double r17612626 = r17612624 + r17612625;
double r17612627 = tan(r17612626);
double r17612628 = tan(r17612624);
double r17612629 = r17612627 - r17612628;
return r17612629;
}
double f(double x, double eps) {
double r17612630 = x;
double r17612631 = tan(r17612630);
double r17612632 = r17612631 - r17612631;
double r17612633 = eps;
double r17612634 = tan(r17612633);
double r17612635 = r17612634 * r17612631;
double r17612636 = r17612631 + r17612634;
double r17612637 = 1.0;
double r17612638 = r17612635 * r17612635;
double r17612639 = r17612637 - r17612638;
double r17612640 = r17612636 / r17612639;
double r17612641 = sin(r17612630);
double r17612642 = r17612641 * r17612641;
double r17612643 = cos(r17612630);
double r17612644 = r17612643 * r17612643;
double r17612645 = r17612642 / r17612644;
double r17612646 = r17612645 * r17612645;
double r17612647 = sin(r17612633);
double r17612648 = 5.0;
double r17612649 = pow(r17612647, r17612648);
double r17612650 = cos(r17612633);
double r17612651 = pow(r17612650, r17612648);
double r17612652 = r17612649 / r17612651;
double r17612653 = r17612647 * r17612647;
double r17612654 = r17612647 * r17612653;
double r17612655 = r17612650 * r17612650;
double r17612656 = r17612650 * r17612655;
double r17612657 = r17612654 / r17612656;
double r17612658 = r17612657 * r17612657;
double r17612659 = r17612641 * r17612642;
double r17612660 = r17612644 * r17612643;
double r17612661 = r17612659 / r17612660;
double r17612662 = r17612661 * r17612661;
double r17612663 = r17612658 * r17612662;
double r17612664 = r17612637 - r17612663;
double r17612665 = r17612652 / r17612664;
double r17612666 = pow(r17612641, r17612648);
double r17612667 = pow(r17612643, r17612648);
double r17612668 = r17612666 / r17612667;
double r17612669 = r17612653 * r17612653;
double r17612670 = r17612655 * r17612655;
double r17612671 = r17612669 / r17612670;
double r17612672 = r17612671 / r17612664;
double r17612673 = r17612653 / r17612655;
double r17612674 = r17612673 / r17612664;
double r17612675 = r17612661 * r17612674;
double r17612676 = fma(r17612668, r17612672, r17612675);
double r17612677 = fma(r17612646, r17612665, r17612676);
double r17612678 = r17612647 / r17612650;
double r17612679 = r17612678 / r17612664;
double r17612680 = r17612664 * r17612644;
double r17612681 = r17612642 / r17612680;
double r17612682 = r17612681 * r17612657;
double r17612683 = r17612679 + r17612682;
double r17612684 = r17612677 + r17612683;
double r17612685 = r17612641 / r17612643;
double r17612686 = r17612685 / r17612664;
double r17612687 = r17612686 - r17612685;
double r17612688 = r17612684 + r17612687;
double r17612689 = fma(r17612635, r17612640, r17612688);
double r17612690 = r17612632 + r17612689;
return r17612690;
}




Bits error versus x




Bits error versus eps
| Original | 37.6 |
|---|---|
| Target | 15.3 |
| Herbie | 0.4 |
Initial program 37.6
rmApplied tan-sum22.2
rmApplied *-un-lft-identity22.2
Applied flip--22.2
Applied associate-/r/22.2
Applied prod-diff22.2
Simplified19.9
Simplified19.9
rmApplied flip3--20.0
Applied associate-/r/20.0
Applied fma-neg20.0
Taylor expanded around inf 20.1
Simplified0.4
Final simplification0.4
herbie shell --seed 2019128 +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)))