x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\begin{array}{l}
\mathbf{if}\;z \le -5.050049854843210856672648667586855708578 \cdot 10^{-6}:\\
\;\;\;\;x - \frac{\log \left(\left(1 - y\right) + \left(\sqrt[3]{y} \cdot \sqrt[3]{y}\right) \cdot \left(\sqrt[3]{y} \cdot e^{z}\right)\right)}{t}\\
\mathbf{elif}\;z \le 1.826438159913990508737942027076897606014 \cdot 10^{-113}:\\
\;\;\;\;x - \left(1 \cdot \frac{z \cdot y}{t} + \left(\frac{\log 1}{t} + 0.5 \cdot \frac{{z}^{2} \cdot y}{t}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;x - \frac{\log \left(1 + y \cdot \left(\frac{1}{2} \cdot {z}^{2} + z\right)\right)}{t}\\
\end{array}double f(double x, double y, double z, double t) {
double r339415 = x;
double r339416 = 1.0;
double r339417 = y;
double r339418 = r339416 - r339417;
double r339419 = z;
double r339420 = exp(r339419);
double r339421 = r339417 * r339420;
double r339422 = r339418 + r339421;
double r339423 = log(r339422);
double r339424 = t;
double r339425 = r339423 / r339424;
double r339426 = r339415 - r339425;
return r339426;
}
double f(double x, double y, double z, double t) {
double r339427 = z;
double r339428 = -5.050049854843211e-06;
bool r339429 = r339427 <= r339428;
double r339430 = x;
double r339431 = 1.0;
double r339432 = y;
double r339433 = r339431 - r339432;
double r339434 = cbrt(r339432);
double r339435 = r339434 * r339434;
double r339436 = exp(r339427);
double r339437 = r339434 * r339436;
double r339438 = r339435 * r339437;
double r339439 = r339433 + r339438;
double r339440 = log(r339439);
double r339441 = t;
double r339442 = r339440 / r339441;
double r339443 = r339430 - r339442;
double r339444 = 1.8264381599139905e-113;
bool r339445 = r339427 <= r339444;
double r339446 = r339427 * r339432;
double r339447 = r339446 / r339441;
double r339448 = r339431 * r339447;
double r339449 = log(r339431);
double r339450 = r339449 / r339441;
double r339451 = 0.5;
double r339452 = 2.0;
double r339453 = pow(r339427, r339452);
double r339454 = r339453 * r339432;
double r339455 = r339454 / r339441;
double r339456 = r339451 * r339455;
double r339457 = r339450 + r339456;
double r339458 = r339448 + r339457;
double r339459 = r339430 - r339458;
double r339460 = 0.5;
double r339461 = r339460 * r339453;
double r339462 = r339461 + r339427;
double r339463 = r339432 * r339462;
double r339464 = r339431 + r339463;
double r339465 = log(r339464);
double r339466 = r339465 / r339441;
double r339467 = r339430 - r339466;
double r339468 = r339445 ? r339459 : r339467;
double r339469 = r339429 ? r339443 : r339468;
return r339469;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 24.8 |
|---|---|
| Target | 15.8 |
| Herbie | 8.3 |
if z < -5.050049854843211e-06Initial program 11.9
rmApplied add-cube-cbrt11.9
Applied associate-*l*11.9
if -5.050049854843211e-06 < z < 1.8264381599139905e-113Initial program 30.6
Taylor expanded around 0 5.8
Simplified5.8
rmApplied add-cube-cbrt5.9
Applied *-un-lft-identity5.9
Applied times-frac5.9
Taylor expanded around inf 5.8
if 1.8264381599139905e-113 < z Initial program 28.7
Taylor expanded around 0 11.8
Simplified11.8
Final simplification8.3
herbie shell --seed 2019353
(FPCore (x y z t)
:name "System.Random.MWC.Distributions:truncatedExp from mwc-random-0.13.3.2"
:precision binary64
:herbie-target
(if (< z -2.8874623088207947e+119) (- (- x (/ (/ (- 0.5) (* y t)) (* z z))) (* (/ (- 0.5) (* y t)) (/ (/ 2 z) (* z z)))) (- x (/ (log (+ 1 (* z y))) t)))
(- x (/ (log (+ (- 1 y) (* y (exp z)))) t)))