x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\begin{array}{l}
\mathbf{if}\;z \le -0.087859946381865645:\\
\;\;\;\;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 -7.05653233804947833 \cdot 10^{-90}:\\
\;\;\;\;x - \frac{\log \left(\frac{1}{2} \cdot \left({z}^{2} \cdot y\right) + \left(z \cdot y + 1\right)\right)}{t}\\
\mathbf{else}:\\
\;\;\;\;x - \left(1 \cdot \frac{1}{\frac{\frac{t}{z}}{y}} + \frac{\log 1}{t}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r239005 = x;
double r239006 = 1.0;
double r239007 = y;
double r239008 = r239006 - r239007;
double r239009 = z;
double r239010 = exp(r239009);
double r239011 = r239007 * r239010;
double r239012 = r239008 + r239011;
double r239013 = log(r239012);
double r239014 = t;
double r239015 = r239013 / r239014;
double r239016 = r239005 - r239015;
return r239016;
}
double f(double x, double y, double z, double t) {
double r239017 = z;
double r239018 = -0.08785994638186564;
bool r239019 = r239017 <= r239018;
double r239020 = x;
double r239021 = 1.0;
double r239022 = y;
double r239023 = r239021 - r239022;
double r239024 = cbrt(r239022);
double r239025 = r239024 * r239024;
double r239026 = exp(r239017);
double r239027 = r239024 * r239026;
double r239028 = r239025 * r239027;
double r239029 = r239023 + r239028;
double r239030 = log(r239029);
double r239031 = t;
double r239032 = r239030 / r239031;
double r239033 = r239020 - r239032;
double r239034 = -7.056532338049478e-90;
bool r239035 = r239017 <= r239034;
double r239036 = 0.5;
double r239037 = 2.0;
double r239038 = pow(r239017, r239037);
double r239039 = r239038 * r239022;
double r239040 = r239036 * r239039;
double r239041 = r239017 * r239022;
double r239042 = r239041 + r239021;
double r239043 = r239040 + r239042;
double r239044 = log(r239043);
double r239045 = r239044 / r239031;
double r239046 = r239020 - r239045;
double r239047 = 1.0;
double r239048 = r239031 / r239017;
double r239049 = r239048 / r239022;
double r239050 = r239047 / r239049;
double r239051 = r239021 * r239050;
double r239052 = log(r239021);
double r239053 = r239052 / r239031;
double r239054 = r239051 + r239053;
double r239055 = r239020 - r239054;
double r239056 = r239035 ? r239046 : r239055;
double r239057 = r239019 ? r239033 : r239056;
return r239057;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 25.0 |
|---|---|
| Target | 15.9 |
| Herbie | 7.8 |
if z < -0.08785994638186564Initial program 11.6
rmApplied add-cube-cbrt11.6
Applied associate-*l*11.6
if -0.08785994638186564 < z < -7.056532338049478e-90Initial program 28.4
Taylor expanded around 0 11.8
if -7.056532338049478e-90 < z Initial program 30.8
Taylor expanded around 0 6.3
Simplified6.3
Taylor expanded around 0 6.4
rmApplied clear-num6.4
rmApplied associate-/r*5.4
Final simplification7.8
herbie shell --seed 2019199
(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)))