x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\begin{array}{l}
\mathbf{if}\;z \le -5.184725816409017 \cdot 10^{-8}:\\
\;\;\;\;x - \frac{\log \left(\mathsf{fma}\left(\sqrt[3]{1 - y} \cdot \sqrt[3]{1 - y}, \sqrt[3]{1 - y}, y \cdot e^{z}\right)\right)}{t}\\
\mathbf{else}:\\
\;\;\;\;x - \mathsf{fma}\left(1, \frac{z}{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \frac{y}{\sqrt[3]{t}}, \frac{\log 1}{t}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r166390 = x;
double r166391 = 1.0;
double r166392 = y;
double r166393 = r166391 - r166392;
double r166394 = z;
double r166395 = exp(r166394);
double r166396 = r166392 * r166395;
double r166397 = r166393 + r166396;
double r166398 = log(r166397);
double r166399 = t;
double r166400 = r166398 / r166399;
double r166401 = r166390 - r166400;
return r166401;
}
double f(double x, double y, double z, double t) {
double r166402 = z;
double r166403 = -5.184725816409017e-08;
bool r166404 = r166402 <= r166403;
double r166405 = x;
double r166406 = 1.0;
double r166407 = y;
double r166408 = r166406 - r166407;
double r166409 = cbrt(r166408);
double r166410 = r166409 * r166409;
double r166411 = exp(r166402);
double r166412 = r166407 * r166411;
double r166413 = fma(r166410, r166409, r166412);
double r166414 = log(r166413);
double r166415 = t;
double r166416 = r166414 / r166415;
double r166417 = r166405 - r166416;
double r166418 = cbrt(r166415);
double r166419 = r166418 * r166418;
double r166420 = r166402 / r166419;
double r166421 = r166407 / r166418;
double r166422 = r166420 * r166421;
double r166423 = log(r166406);
double r166424 = r166423 / r166415;
double r166425 = fma(r166406, r166422, r166424);
double r166426 = r166405 - r166425;
double r166427 = r166404 ? r166417 : r166426;
return r166427;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 25.3 |
|---|---|
| Target | 16.6 |
| Herbie | 8.6 |
if z < -5.184725816409017e-08Initial program 11.8
rmApplied add-cube-cbrt11.8
Applied fma-def11.8
if -5.184725816409017e-08 < z Initial program 31.2
Taylor expanded around 0 7.5
Simplified7.5
Taylor expanded around 0 7.6
Simplified7.6
rmApplied add-cube-cbrt7.8
Applied times-frac7.2
Final simplification8.6
herbie shell --seed 2019198 +o rules:numerics
(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)))