x + \frac{\left(y - z\right) \cdot t}{a - z}\begin{array}{l}
\mathbf{if}\;t \le -3.621409335508072898622395529775828545171 \cdot 10^{-15} \lor \neg \left(t \le 6.874929093463645168164571333770296454924 \cdot 10^{-172}\right):\\
\;\;\;\;\frac{t}{\frac{a - z}{y - z}} + x\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{a - z} \cdot \left(\left(y - z\right) \cdot t\right) + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r333497 = x;
double r333498 = y;
double r333499 = z;
double r333500 = r333498 - r333499;
double r333501 = t;
double r333502 = r333500 * r333501;
double r333503 = a;
double r333504 = r333503 - r333499;
double r333505 = r333502 / r333504;
double r333506 = r333497 + r333505;
return r333506;
}
double f(double x, double y, double z, double t, double a) {
double r333507 = t;
double r333508 = -3.621409335508073e-15;
bool r333509 = r333507 <= r333508;
double r333510 = 6.874929093463645e-172;
bool r333511 = r333507 <= r333510;
double r333512 = !r333511;
bool r333513 = r333509 || r333512;
double r333514 = a;
double r333515 = z;
double r333516 = r333514 - r333515;
double r333517 = y;
double r333518 = r333517 - r333515;
double r333519 = r333516 / r333518;
double r333520 = r333507 / r333519;
double r333521 = x;
double r333522 = r333520 + r333521;
double r333523 = 1.0;
double r333524 = r333523 / r333516;
double r333525 = r333518 * r333507;
double r333526 = r333524 * r333525;
double r333527 = r333526 + r333521;
double r333528 = r333513 ? r333522 : r333527;
return r333528;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.6 |
|---|---|
| Target | 0.5 |
| Herbie | 0.6 |
if t < -3.621409335508073e-15 or 6.874929093463645e-172 < t Initial program 16.9
Simplified0.8
rmApplied clear-num0.8
rmApplied fma-udef0.8
Simplified0.7
if -3.621409335508073e-15 < t < 6.874929093463645e-172Initial program 0.3
Simplified2.3
rmApplied clear-num2.3
rmApplied fma-udef2.3
Simplified2.0
rmApplied div-inv2.0
Applied *-un-lft-identity2.0
Applied times-frac0.3
Simplified0.3
Final simplification0.6
herbie shell --seed 2019326 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTick from plot-0.2.3.4, A"
:precision binary64
:herbie-target
(if (< t -1.0682974490174067e-39) (+ x (* (/ (- y z) (- a z)) t)) (if (< t 3.9110949887586375e-141) (+ x (/ (* (- y z) t) (- a z))) (+ x (* (/ (- y z) (- a z)) t))))
(+ x (/ (* (- y z) t) (- a z))))