x + y \cdot \frac{z - t}{a - t}x + y \cdot \left(\frac{z}{a - t} - \mathsf{log1p}\left(\mathsf{expm1}\left(\frac{t}{a - t}\right)\right)\right)double f(double x, double y, double z, double t, double a) {
double r526362 = x;
double r526363 = y;
double r526364 = z;
double r526365 = t;
double r526366 = r526364 - r526365;
double r526367 = a;
double r526368 = r526367 - r526365;
double r526369 = r526366 / r526368;
double r526370 = r526363 * r526369;
double r526371 = r526362 + r526370;
return r526371;
}
double f(double x, double y, double z, double t, double a) {
double r526372 = x;
double r526373 = y;
double r526374 = z;
double r526375 = a;
double r526376 = t;
double r526377 = r526375 - r526376;
double r526378 = r526374 / r526377;
double r526379 = r526376 / r526377;
double r526380 = expm1(r526379);
double r526381 = log1p(r526380);
double r526382 = r526378 - r526381;
double r526383 = r526373 * r526382;
double r526384 = r526372 + r526383;
return r526384;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 1.4 |
|---|---|
| Target | 0.4 |
| Herbie | 1.4 |
Initial program 1.4
rmApplied div-sub1.4
rmApplied log1p-expm1-u1.4
Final simplification1.4
herbie shell --seed 2020039 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisLine from plot-0.2.3.4, B"
:precision binary64
:herbie-target
(if (< y -8.508084860551241e-17) (+ x (* y (/ (- z t) (- a t)))) (if (< y 2.894426862792089e-49) (+ x (* (* y (- z t)) (/ 1 (- a t)))) (+ x (* y (/ (- z t) (- a t))))))
(+ x (* y (/ (- z t) (- a t)))))