x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\begin{array}{l}
\mathbf{if}\;e^{z} \le 0.0:\\
\;\;\;\;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{else}:\\
\;\;\;\;x - \left(1 \cdot \left(\left(z \cdot \frac{\sqrt[3]{y} \cdot \sqrt[3]{y}}{\sqrt[3]{t} \cdot \sqrt[3]{t}}\right) \cdot \frac{\sqrt[3]{y}}{\sqrt[3]{t}}\right) + \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 r315267 = x;
double r315268 = 1.0;
double r315269 = y;
double r315270 = r315268 - r315269;
double r315271 = z;
double r315272 = exp(r315271);
double r315273 = r315269 * r315272;
double r315274 = r315270 + r315273;
double r315275 = log(r315274);
double r315276 = t;
double r315277 = r315275 / r315276;
double r315278 = r315267 - r315277;
return r315278;
}
double f(double x, double y, double z, double t) {
double r315279 = z;
double r315280 = exp(r315279);
double r315281 = 0.0;
bool r315282 = r315280 <= r315281;
double r315283 = x;
double r315284 = 1.0;
double r315285 = y;
double r315286 = r315284 - r315285;
double r315287 = cbrt(r315285);
double r315288 = r315287 * r315287;
double r315289 = r315287 * r315280;
double r315290 = r315288 * r315289;
double r315291 = r315286 + r315290;
double r315292 = log(r315291);
double r315293 = t;
double r315294 = r315292 / r315293;
double r315295 = r315283 - r315294;
double r315296 = cbrt(r315293);
double r315297 = r315296 * r315296;
double r315298 = r315288 / r315297;
double r315299 = r315279 * r315298;
double r315300 = r315287 / r315296;
double r315301 = r315299 * r315300;
double r315302 = r315284 * r315301;
double r315303 = log(r315284);
double r315304 = r315303 / r315293;
double r315305 = 0.5;
double r315306 = 2.0;
double r315307 = pow(r315279, r315306);
double r315308 = r315307 * r315285;
double r315309 = r315308 / r315293;
double r315310 = r315305 * r315309;
double r315311 = r315304 + r315310;
double r315312 = r315302 + r315311;
double r315313 = r315283 - r315312;
double r315314 = r315282 ? r315295 : r315313;
return r315314;
}




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.1 |
if (exp z) < 0.0Initial program 11.5
rmApplied add-cube-cbrt11.5
Applied associate-*l*11.5
if 0.0 < (exp z) Initial program 31.2
Taylor expanded around 0 7.1
rmApplied *-un-lft-identity7.1
Applied times-frac9.4
Simplified9.4
rmApplied add-cube-cbrt9.6
Applied add-cube-cbrt9.6
Applied times-frac9.6
Applied associate-*r*6.6
Final simplification8.1
herbie shell --seed 2020064
(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)))