x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\begin{array}{l}
\mathbf{if}\;e^{z} \le 0.99993958631142354:\\
\;\;\;\;x - \frac{\sqrt[3]{{\left(\log \left(1 - \left(1 - e^{z}\right) \cdot y\right)\right)}^{3}}}{t}\\
\mathbf{else}:\\
\;\;\;\;x - \left(1 \cdot \frac{1}{\frac{t}{z \cdot y}} + \left(\frac{\log 1}{t} + 0.5 \cdot \frac{{z}^{2} \cdot y}{t}\right)\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r285545 = x;
double r285546 = 1.0;
double r285547 = y;
double r285548 = r285546 - r285547;
double r285549 = z;
double r285550 = exp(r285549);
double r285551 = r285547 * r285550;
double r285552 = r285548 + r285551;
double r285553 = log(r285552);
double r285554 = t;
double r285555 = r285553 / r285554;
double r285556 = r285545 - r285555;
return r285556;
}
double f(double x, double y, double z, double t) {
double r285557 = z;
double r285558 = exp(r285557);
double r285559 = 0.9999395863114235;
bool r285560 = r285558 <= r285559;
double r285561 = x;
double r285562 = 1.0;
double r285563 = 1.0;
double r285564 = r285563 - r285558;
double r285565 = y;
double r285566 = r285564 * r285565;
double r285567 = r285562 - r285566;
double r285568 = log(r285567);
double r285569 = 3.0;
double r285570 = pow(r285568, r285569);
double r285571 = cbrt(r285570);
double r285572 = t;
double r285573 = r285571 / r285572;
double r285574 = r285561 - r285573;
double r285575 = r285557 * r285565;
double r285576 = r285572 / r285575;
double r285577 = r285563 / r285576;
double r285578 = r285562 * r285577;
double r285579 = log(r285562);
double r285580 = r285579 / r285572;
double r285581 = 0.5;
double r285582 = 2.0;
double r285583 = pow(r285557, r285582);
double r285584 = r285583 * r285565;
double r285585 = r285584 / r285572;
double r285586 = r285581 * r285585;
double r285587 = r285580 + r285586;
double r285588 = r285578 + r285587;
double r285589 = r285561 - r285588;
double r285590 = r285560 ? r285574 : r285589;
return r285590;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 24.9 |
|---|---|
| Target | 16.0 |
| Herbie | 8.8 |
if (exp z) < 0.9999395863114235Initial program 12.3
rmApplied associate-+l-12.3
Simplified12.3
rmApplied add-cbrt-cube12.4
Simplified12.4
if 0.9999395863114235 < (exp z) Initial program 30.3
rmApplied associate-+l-15.3
Simplified15.2
Taylor expanded around 0 7.3
rmApplied clear-num7.3
Final simplification8.8
herbie shell --seed 2020039
(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)))