x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\begin{array}{l}
\mathbf{if}\;e^{z} \le 0.9999999353825346215529634719132445752621:\\
\;\;\;\;x - \frac{\sqrt[3]{\log \left(\left(1 + y \cdot e^{z}\right) - y\right)}}{\frac{\sqrt[3]{t} \cdot \sqrt[3]{t}}{\sqrt[3]{\log \left(\left(1 + y \cdot e^{z}\right) - y\right)}}} \cdot \frac{\sqrt[3]{\log \left(\left(1 + y \cdot e^{z}\right) - y\right)}}{\sqrt[3]{t}}\\
\mathbf{else}:\\
\;\;\;\;\left(x - \frac{y}{\frac{\sqrt[3]{t}}{z}} \cdot \frac{1}{\sqrt[3]{t} \cdot \sqrt[3]{t}}\right) - \frac{\log 1}{t}\\
\end{array}double f(double x, double y, double z, double t) {
double r297700 = x;
double r297701 = 1.0;
double r297702 = y;
double r297703 = r297701 - r297702;
double r297704 = z;
double r297705 = exp(r297704);
double r297706 = r297702 * r297705;
double r297707 = r297703 + r297706;
double r297708 = log(r297707);
double r297709 = t;
double r297710 = r297708 / r297709;
double r297711 = r297700 - r297710;
return r297711;
}
double f(double x, double y, double z, double t) {
double r297712 = z;
double r297713 = exp(r297712);
double r297714 = 0.9999999353825346;
bool r297715 = r297713 <= r297714;
double r297716 = x;
double r297717 = 1.0;
double r297718 = y;
double r297719 = r297718 * r297713;
double r297720 = r297717 + r297719;
double r297721 = r297720 - r297718;
double r297722 = log(r297721);
double r297723 = cbrt(r297722);
double r297724 = t;
double r297725 = cbrt(r297724);
double r297726 = r297725 * r297725;
double r297727 = r297726 / r297723;
double r297728 = r297723 / r297727;
double r297729 = r297723 / r297725;
double r297730 = r297728 * r297729;
double r297731 = r297716 - r297730;
double r297732 = r297725 / r297712;
double r297733 = r297718 / r297732;
double r297734 = r297717 / r297726;
double r297735 = r297733 * r297734;
double r297736 = r297716 - r297735;
double r297737 = log(r297717);
double r297738 = r297737 / r297724;
double r297739 = r297736 - r297738;
double r297740 = r297715 ? r297731 : r297739;
return r297740;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 25.4 |
|---|---|
| Target | 16.4 |
| Herbie | 8.4 |
if (exp z) < 0.9999999353825346Initial program 11.2
rmApplied add-cube-cbrt11.4
Applied add-cube-cbrt11.5
Applied times-frac11.5
Simplified11.5
Simplified11.5
if 0.9999999353825346 < (exp z) Initial program 31.8
Taylor expanded around 0 7.2
Simplified7.2
Taylor expanded around 0 7.3
Simplified7.3
rmApplied associate-/l*6.7
Simplified6.7
rmApplied add-cube-cbrt6.9
Applied times-frac6.9
Applied *-un-lft-identity6.9
Applied times-frac7.0
Simplified7.0
Final simplification8.4
herbie shell --seed 2019174
(FPCore (x y z t)
:name "System.Random.MWC.Distributions:truncatedExp from mwc-random-0.13.3.2"
:herbie-target
(if (< z -2.8874623088207947e+119) (- (- x (/ (/ (- 0.5) (* y t)) (* z z))) (* (/ (- 0.5) (* y t)) (/ (/ 2.0 z) (* z z)))) (- x (/ (log (+ 1.0 (* z y))) t)))
(- x (/ (log (+ (- 1.0 y) (* y (exp z)))) t)))