x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\begin{array}{l}
\mathbf{if}\;z \le -71733.55053223111:\\
\;\;\;\;x - \frac{2 \cdot \log \left(\sqrt[3]{\left(1 - y\right) + \left(\sqrt[3]{y \cdot e^{z}} \cdot \sqrt[3]{y \cdot e^{z}}\right) \cdot \sqrt[3]{y \cdot e^{z}}}\right) + \log \left(\sqrt[3]{\left(1 - y\right) + \left(\sqrt[3]{y \cdot e^{z}} \cdot \sqrt[3]{y \cdot e^{z}}\right) \cdot \sqrt[3]{y \cdot e^{z}}}\right)}{t}\\
\mathbf{elif}\;z \le 5.1398477853792008 \cdot 10^{-188}:\\
\;\;\;\;x - \frac{\log 1 + y \cdot \left(0.5 \cdot {z}^{2} + 1 \cdot z\right)}{t}\\
\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 r308782 = x;
double r308783 = 1.0;
double r308784 = y;
double r308785 = r308783 - r308784;
double r308786 = z;
double r308787 = exp(r308786);
double r308788 = r308784 * r308787;
double r308789 = r308785 + r308788;
double r308790 = log(r308789);
double r308791 = t;
double r308792 = r308790 / r308791;
double r308793 = r308782 - r308792;
return r308793;
}
double f(double x, double y, double z, double t) {
double r308794 = z;
double r308795 = -71733.55053223111;
bool r308796 = r308794 <= r308795;
double r308797 = x;
double r308798 = 2.0;
double r308799 = 1.0;
double r308800 = y;
double r308801 = r308799 - r308800;
double r308802 = exp(r308794);
double r308803 = r308800 * r308802;
double r308804 = cbrt(r308803);
double r308805 = r308804 * r308804;
double r308806 = r308805 * r308804;
double r308807 = r308801 + r308806;
double r308808 = cbrt(r308807);
double r308809 = log(r308808);
double r308810 = r308798 * r308809;
double r308811 = r308810 + r308809;
double r308812 = t;
double r308813 = r308811 / r308812;
double r308814 = r308797 - r308813;
double r308815 = 5.139847785379201e-188;
bool r308816 = r308794 <= r308815;
double r308817 = log(r308799);
double r308818 = 0.5;
double r308819 = pow(r308794, r308798);
double r308820 = r308818 * r308819;
double r308821 = r308799 * r308794;
double r308822 = r308820 + r308821;
double r308823 = r308800 * r308822;
double r308824 = r308817 + r308823;
double r308825 = r308824 / r308812;
double r308826 = r308797 - r308825;
double r308827 = 0.5;
double r308828 = r308827 * r308819;
double r308829 = r308828 + r308794;
double r308830 = r308800 * r308829;
double r308831 = r308799 + r308830;
double r308832 = log(r308831);
double r308833 = r308832 / r308812;
double r308834 = r308797 - r308833;
double r308835 = r308816 ? r308826 : r308834;
double r308836 = r308796 ? r308814 : r308835;
return r308836;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 25.1 |
|---|---|
| Target | 16.8 |
| Herbie | 9.4 |
if z < -71733.55053223111Initial program 12.1
rmApplied add-cube-cbrt12.1
rmApplied add-cube-cbrt12.2
Applied log-prod12.2
Simplified12.2
if -71733.55053223111 < z < 5.139847785379201e-188Initial program 30.5
rmApplied add-cube-cbrt25.8
Taylor expanded around 0 6.5
Simplified6.5
if 5.139847785379201e-188 < z Initial program 30.5
Taylor expanded around 0 12.4
Simplified12.4
Final simplification9.4
herbie shell --seed 2020083
(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)))