\left(2 \cdot \sqrt{x}\right) \cdot \cos \left(y - \frac{z \cdot t}{3}\right) - \frac{a}{b \cdot 3}\left(\mathsf{expm1}\left(\mathsf{log1p}\left(\cos \left(\left(z \cdot 0.3333333333333333148296162562473909929395\right) \cdot t\right)\right)\right) \cdot \left(\left(2 \cdot \sqrt{x}\right) \cdot \cos y\right) + \sin y \cdot \left(\sin \left(\frac{t}{\frac{3}{z}}\right) \cdot \left(2 \cdot \sqrt{x}\right)\right)\right) - \frac{\frac{a}{b}}{3}double f(double x, double y, double z, double t, double a, double b) {
double r554397 = 2.0;
double r554398 = x;
double r554399 = sqrt(r554398);
double r554400 = r554397 * r554399;
double r554401 = y;
double r554402 = z;
double r554403 = t;
double r554404 = r554402 * r554403;
double r554405 = 3.0;
double r554406 = r554404 / r554405;
double r554407 = r554401 - r554406;
double r554408 = cos(r554407);
double r554409 = r554400 * r554408;
double r554410 = a;
double r554411 = b;
double r554412 = r554411 * r554405;
double r554413 = r554410 / r554412;
double r554414 = r554409 - r554413;
return r554414;
}
double f(double x, double y, double z, double t, double a, double b) {
double r554415 = z;
double r554416 = 0.3333333333333333;
double r554417 = r554415 * r554416;
double r554418 = t;
double r554419 = r554417 * r554418;
double r554420 = cos(r554419);
double r554421 = log1p(r554420);
double r554422 = expm1(r554421);
double r554423 = 2.0;
double r554424 = x;
double r554425 = sqrt(r554424);
double r554426 = r554423 * r554425;
double r554427 = y;
double r554428 = cos(r554427);
double r554429 = r554426 * r554428;
double r554430 = r554422 * r554429;
double r554431 = sin(r554427);
double r554432 = 3.0;
double r554433 = r554432 / r554415;
double r554434 = r554418 / r554433;
double r554435 = sin(r554434);
double r554436 = r554435 * r554426;
double r554437 = r554431 * r554436;
double r554438 = r554430 + r554437;
double r554439 = a;
double r554440 = b;
double r554441 = r554439 / r554440;
double r554442 = r554441 / r554432;
double r554443 = r554438 - r554442;
return r554443;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 21.0 |
|---|---|
| Target | 18.9 |
| Herbie | 20.7 |
Initial program 21.0
rmApplied cos-diff20.7
Applied distribute-lft-in20.7
Simplified20.6
Simplified20.6
Taylor expanded around inf 20.7
Simplified20.7
rmApplied associate-/r*20.7
rmApplied expm1-log1p-u20.7
Simplified20.7
Final simplification20.7
herbie shell --seed 2019179 +o rules:numerics
(FPCore (x y z t a b)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, K"
:herbie-target
(if (< z -1.3793337487235141e+129) (- (* (* 2.0 (sqrt x)) (cos (- (/ 1.0 y) (/ (/ 0.3333333333333333 z) t)))) (/ (/ a 3.0) b)) (if (< z 3.516290613555987e+106) (- (* (* (sqrt x) 2.0) (cos (- y (* (/ t 3.0) z)))) (/ (/ a 3.0) b)) (- (* (cos (- y (/ (/ 0.3333333333333333 z) t))) (* 2.0 (sqrt x))) (/ (/ a b) 3.0))))
(- (* (* 2.0 (sqrt x)) (cos (- y (/ (* z t) 3.0)))) (/ a (* b 3.0))))