x + \left(\tan \left(y + z\right) - \tan a\right)
x + \left(\frac{\tan y + \tan z}{1 - \frac{\tan y \cdot \sin z}{\cos z} \cdot \left(\tan y \cdot \tan z\right)} \cdot \left(1 + \frac{\sin y \cdot \sin z}{\cos y \cdot \cos z}\right) - \tan a\right)double f(double x, double y, double z, double a) {
double r140332 = x;
double r140333 = y;
double r140334 = z;
double r140335 = r140333 + r140334;
double r140336 = tan(r140335);
double r140337 = a;
double r140338 = tan(r140337);
double r140339 = r140336 - r140338;
double r140340 = r140332 + r140339;
return r140340;
}
double f(double x, double y, double z, double a) {
double r140341 = x;
double r140342 = y;
double r140343 = tan(r140342);
double r140344 = z;
double r140345 = tan(r140344);
double r140346 = r140343 + r140345;
double r140347 = 1.0;
double r140348 = sin(r140344);
double r140349 = r140343 * r140348;
double r140350 = cos(r140344);
double r140351 = r140349 / r140350;
double r140352 = r140343 * r140345;
double r140353 = r140351 * r140352;
double r140354 = r140347 - r140353;
double r140355 = r140346 / r140354;
double r140356 = sin(r140342);
double r140357 = r140356 * r140348;
double r140358 = cos(r140342);
double r140359 = r140358 * r140350;
double r140360 = r140357 / r140359;
double r140361 = r140347 + r140360;
double r140362 = r140355 * r140361;
double r140363 = a;
double r140364 = tan(r140363);
double r140365 = r140362 - r140364;
double r140366 = r140341 + r140365;
return r140366;
}



Bits error versus x



Bits error versus y



Bits error versus z



Bits error versus a
Results
Initial program 13.2
rmApplied tan-sum0.2
rmApplied flip--0.2
Applied associate-/r/0.2
Simplified0.2
rmApplied tan-quot0.2
Applied associate-*r/0.2
rmApplied tan-quot0.2
Applied tan-quot0.2
Applied frac-times0.2
Final simplification0.2
herbie shell --seed 2020043
(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.7512240000000001e+308)) (or (<= -1.7767070000000002e+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.7512240000000001e+308)))
(+ x (- (tan (+ y z)) (tan a))))