x + \left(\tan \left(y + z\right) - \tan a\right)
\left(x + \mathsf{fma}\left(\frac{\tan y + \tan z}{1 - \left(\tan y \cdot \tan z\right) \cdot \left(\tan y \cdot \tan z\right)}, \mathsf{fma}\left(\tan y, \tan z, 1\right), -\tan a\right)\right) + \mathsf{fma}\left(-\sqrt[3]{\tan a}, \sqrt[3]{\tan a} \cdot \sqrt[3]{\tan a}, \sqrt[3]{\tan a} \cdot \left(\sqrt[3]{\tan a} \cdot \sqrt[3]{\tan a}\right)\right)double f(double x, double y, double z, double a) {
double r106820 = x;
double r106821 = y;
double r106822 = z;
double r106823 = r106821 + r106822;
double r106824 = tan(r106823);
double r106825 = a;
double r106826 = tan(r106825);
double r106827 = r106824 - r106826;
double r106828 = r106820 + r106827;
return r106828;
}
double f(double x, double y, double z, double a) {
double r106829 = x;
double r106830 = y;
double r106831 = tan(r106830);
double r106832 = z;
double r106833 = tan(r106832);
double r106834 = r106831 + r106833;
double r106835 = 1.0;
double r106836 = r106831 * r106833;
double r106837 = r106836 * r106836;
double r106838 = r106835 - r106837;
double r106839 = r106834 / r106838;
double r106840 = fma(r106831, r106833, r106835);
double r106841 = a;
double r106842 = tan(r106841);
double r106843 = -r106842;
double r106844 = fma(r106839, r106840, r106843);
double r106845 = r106829 + r106844;
double r106846 = cbrt(r106842);
double r106847 = -r106846;
double r106848 = r106846 * r106846;
double r106849 = r106846 * r106848;
double r106850 = fma(r106847, r106848, r106849);
double r106851 = r106845 + r106850;
return r106851;
}



Bits error versus x



Bits error versus y



Bits error versus z



Bits error versus a
Initial program 13.3
rmApplied tan-sum0.2
rmApplied add-cube-cbrt0.3
Applied flip--0.3
Applied associate-/r/0.3
Applied prod-diff0.3
Applied associate-+r+0.3
Simplified0.2
Final simplification0.2
herbie shell --seed 2019325 +o rules:numerics
(FPCore (x y z a)
:name "(+ x (- (tan (+ y z)) (tan a)))"
:precision binary64
:pre (and (or (== x 0.0) (<= 0.5884142 x 505.5909)) (or (<= -1.796658e+308 y -9.425585e-310) (<= 1.284938e-309 y 1.751224e+308)) (or (<= -1.776707e+308 z -8.599796e-310) (<= 3.293145e-311 z 1.725154e+308)) (or (<= -1.796658e+308 a -9.425585e-310) (<= 1.284938e-309 a 1.751224e+308)))
(+ x (- (tan (+ y z)) (tan a))))