x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\begin{array}{l}
\mathbf{if}\;z \le -47013041841263568:\\
\;\;\;\;x - \frac{1}{\frac{t}{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}}\\
\mathbf{else}:\\
\;\;\;\;x - \frac{\log 1 + y \cdot \left(0.5 \cdot {z}^{2} + 1 \cdot z\right)}{t}\\
\end{array}double f(double x, double y, double z, double t) {
double r338390 = x;
double r338391 = 1.0;
double r338392 = y;
double r338393 = r338391 - r338392;
double r338394 = z;
double r338395 = exp(r338394);
double r338396 = r338392 * r338395;
double r338397 = r338393 + r338396;
double r338398 = log(r338397);
double r338399 = t;
double r338400 = r338398 / r338399;
double r338401 = r338390 - r338400;
return r338401;
}
double f(double x, double y, double z, double t) {
double r338402 = z;
double r338403 = -4.701304184126357e+16;
bool r338404 = r338402 <= r338403;
double r338405 = x;
double r338406 = 1.0;
double r338407 = t;
double r338408 = 1.0;
double r338409 = y;
double r338410 = r338408 - r338409;
double r338411 = exp(r338402);
double r338412 = r338409 * r338411;
double r338413 = r338410 + r338412;
double r338414 = log(r338413);
double r338415 = r338407 / r338414;
double r338416 = r338406 / r338415;
double r338417 = r338405 - r338416;
double r338418 = log(r338408);
double r338419 = 0.5;
double r338420 = 2.0;
double r338421 = pow(r338402, r338420);
double r338422 = r338419 * r338421;
double r338423 = r338408 * r338402;
double r338424 = r338422 + r338423;
double r338425 = r338409 * r338424;
double r338426 = r338418 + r338425;
double r338427 = r338426 / r338407;
double r338428 = r338405 - r338427;
double r338429 = r338404 ? r338417 : r338428;
return r338429;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 24.7 |
|---|---|
| Target | 16.3 |
| Herbie | 8.8 |
if z < -4.701304184126357e+16Initial program 11.3
rmApplied clear-num11.3
if -4.701304184126357e+16 < z Initial program 30.2
Taylor expanded around 0 7.8
Simplified7.8
Final simplification8.8
herbie shell --seed 2020047
(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)))