x - \frac{\log \left(\left(1.0 - y\right) + y \cdot e^{z}\right)}{t}\begin{array}{l}
\mathbf{if}\;z \le -0.005019481635896301:\\
\;\;\;\;x - \log \left(e^{z} \cdot y + \left(1.0 - y\right)\right) \cdot \frac{1}{t}\\
\mathbf{else}:\\
\;\;\;\;x - \left(1.0 \cdot \left(\left(\sqrt[3]{y} \cdot \left(z \cdot \sqrt[3]{y}\right)\right) \cdot \frac{\sqrt[3]{y}}{t}\right) + \frac{\log 1.0}{t}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r9875887 = x;
double r9875888 = 1.0;
double r9875889 = y;
double r9875890 = r9875888 - r9875889;
double r9875891 = z;
double r9875892 = exp(r9875891);
double r9875893 = r9875889 * r9875892;
double r9875894 = r9875890 + r9875893;
double r9875895 = log(r9875894);
double r9875896 = t;
double r9875897 = r9875895 / r9875896;
double r9875898 = r9875887 - r9875897;
return r9875898;
}
double f(double x, double y, double z, double t) {
double r9875899 = z;
double r9875900 = -0.005019481635896301;
bool r9875901 = r9875899 <= r9875900;
double r9875902 = x;
double r9875903 = exp(r9875899);
double r9875904 = y;
double r9875905 = r9875903 * r9875904;
double r9875906 = 1.0;
double r9875907 = r9875906 - r9875904;
double r9875908 = r9875905 + r9875907;
double r9875909 = log(r9875908);
double r9875910 = 1.0;
double r9875911 = t;
double r9875912 = r9875910 / r9875911;
double r9875913 = r9875909 * r9875912;
double r9875914 = r9875902 - r9875913;
double r9875915 = cbrt(r9875904);
double r9875916 = r9875899 * r9875915;
double r9875917 = r9875915 * r9875916;
double r9875918 = r9875915 / r9875911;
double r9875919 = r9875917 * r9875918;
double r9875920 = r9875906 * r9875919;
double r9875921 = log(r9875906);
double r9875922 = r9875921 / r9875911;
double r9875923 = r9875920 + r9875922;
double r9875924 = r9875902 - r9875923;
double r9875925 = r9875901 ? r9875914 : r9875924;
return r9875925;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 25.2 |
|---|---|
| Target | 16.6 |
| Herbie | 8.9 |
if z < -0.005019481635896301Initial program 11.7
rmApplied div-inv11.7
if -0.005019481635896301 < z Initial program 31.0
Taylor expanded around 0 7.2
rmApplied *-un-lft-identity7.2
Applied times-frac9.1
Simplified9.1
rmApplied *-un-lft-identity9.1
Applied add-cube-cbrt9.3
Applied times-frac9.3
Applied associate-*r*7.7
Simplified7.7
Final simplification8.9
herbie shell --seed 2019165
(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)))