x + \left(\tan \left(y + z\right) - \tan a\right)
\left(\frac{\mathsf{fma}\left(\sqrt[3]{\tan y} \cdot \sqrt[3]{\tan y}, \sqrt[3]{\sqrt[3]{\tan y} \cdot \sqrt[3]{\tan y}} \cdot \sqrt[3]{\sqrt[3]{\tan y}}, \tan z\right)}{1 - \tan y \cdot \tan z} - \tan a\right) + xdouble f(double x, double y, double z, double a) {
double r4503832 = x;
double r4503833 = y;
double r4503834 = z;
double r4503835 = r4503833 + r4503834;
double r4503836 = tan(r4503835);
double r4503837 = a;
double r4503838 = tan(r4503837);
double r4503839 = r4503836 - r4503838;
double r4503840 = r4503832 + r4503839;
return r4503840;
}
double f(double x, double y, double z, double a) {
double r4503841 = y;
double r4503842 = tan(r4503841);
double r4503843 = cbrt(r4503842);
double r4503844 = r4503843 * r4503843;
double r4503845 = cbrt(r4503844);
double r4503846 = cbrt(r4503843);
double r4503847 = r4503845 * r4503846;
double r4503848 = z;
double r4503849 = tan(r4503848);
double r4503850 = fma(r4503844, r4503847, r4503849);
double r4503851 = 1.0;
double r4503852 = r4503842 * r4503849;
double r4503853 = r4503851 - r4503852;
double r4503854 = r4503850 / r4503853;
double r4503855 = a;
double r4503856 = tan(r4503855);
double r4503857 = r4503854 - r4503856;
double r4503858 = x;
double r4503859 = r4503857 + r4503858;
return r4503859;
}



Bits error versus x



Bits error versus y



Bits error versus z



Bits error versus a
Initial program 12.8
rmApplied tan-sum0.2
rmApplied add-cube-cbrt0.3
Applied fma-def0.3
rmApplied add-cube-cbrt0.3
Applied cbrt-prod0.3
Final simplification0.3
herbie shell --seed 2019168 +o rules:numerics
(FPCore (x y z a)
:name "(+ x (- (tan (+ y z)) (tan a)))"
: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))))