x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\begin{array}{l}
\mathbf{if}\;e^{z} \le 0.999999999977131515:\\
\;\;\;\;x - \frac{2 \cdot \log \left(\sqrt[3]{\left(1 - y\right) + y \cdot e^{z}}\right) + \log \left(\sqrt[3]{\left(1 - y\right) + y \cdot e^{z}}\right)}{t}\\
\mathbf{else}:\\
\;\;\;\;x - \left(1 \cdot \frac{z \cdot y}{t} + \frac{\log 1}{t}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r234528 = x;
double r234529 = 1.0;
double r234530 = y;
double r234531 = r234529 - r234530;
double r234532 = z;
double r234533 = exp(r234532);
double r234534 = r234530 * r234533;
double r234535 = r234531 + r234534;
double r234536 = log(r234535);
double r234537 = t;
double r234538 = r234536 / r234537;
double r234539 = r234528 - r234538;
return r234539;
}
double f(double x, double y, double z, double t) {
double r234540 = z;
double r234541 = exp(r234540);
double r234542 = 0.9999999999771315;
bool r234543 = r234541 <= r234542;
double r234544 = x;
double r234545 = 2.0;
double r234546 = 1.0;
double r234547 = y;
double r234548 = r234546 - r234547;
double r234549 = r234547 * r234541;
double r234550 = r234548 + r234549;
double r234551 = cbrt(r234550);
double r234552 = log(r234551);
double r234553 = r234545 * r234552;
double r234554 = r234553 + r234552;
double r234555 = t;
double r234556 = r234554 / r234555;
double r234557 = r234544 - r234556;
double r234558 = r234540 * r234547;
double r234559 = r234558 / r234555;
double r234560 = r234546 * r234559;
double r234561 = log(r234546);
double r234562 = r234561 / r234555;
double r234563 = r234560 + r234562;
double r234564 = r234544 - r234563;
double r234565 = r234543 ? r234557 : r234564;
return r234565;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 24.8 |
|---|---|
| Target | 15.9 |
| Herbie | 8.2 |
if (exp z) < 0.9999999999771315Initial program 10.5
rmApplied add-cube-cbrt10.5
Applied log-prod10.5
Simplified10.5
if 0.9999999999771315 < (exp z) Initial program 31.2
Taylor expanded around 0 7.1
Simplified7.1
Taylor expanded around 0 7.2
Final simplification8.2
herbie shell --seed 2020036 +o rules:numerics
(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)))