x - \frac{\log \left(\left(1.0 - y\right) + y \cdot e^{z}\right)}{t}\begin{array}{l}
\mathbf{if}\;z \le -1.7774096754001219 \cdot 10^{-84}:\\
\;\;\;\;x - \frac{\sqrt[3]{\log \left(\sqrt{\mathsf{fma}\left(\mathsf{expm1}\left(z\right), y, 1.0\right)}\right) + \log \left(\sqrt{\mathsf{fma}\left(\mathsf{expm1}\left(z\right), y, 1.0\right)}\right)} \cdot \sqrt[3]{\log \left(\sqrt{\mathsf{fma}\left(\mathsf{expm1}\left(z\right), y, 1.0\right)}\right) + \log \left(\sqrt{\mathsf{fma}\left(\mathsf{expm1}\left(z\right), y, 1.0\right)}\right)}}{\frac{t}{\sqrt[3]{\log \left(\sqrt{\mathsf{fma}\left(\mathsf{expm1}\left(z\right), y, 1.0\right)}\right) + \log \left(\sqrt{\mathsf{fma}\left(\mathsf{expm1}\left(z\right), y, 1.0\right)}\right)}}}\\
\mathbf{else}:\\
\;\;\;\;x - \mathsf{fma}\left(\frac{\log \left(\sqrt{1.0}\right)}{t}, 2, \mathsf{fma}\left(\frac{z}{t}, \frac{y}{1.0}, \left(\frac{z \cdot z}{t} \cdot \frac{1}{2}\right) \cdot \frac{y}{1.0}\right)\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r11736205 = x;
double r11736206 = 1.0;
double r11736207 = y;
double r11736208 = r11736206 - r11736207;
double r11736209 = z;
double r11736210 = exp(r11736209);
double r11736211 = r11736207 * r11736210;
double r11736212 = r11736208 + r11736211;
double r11736213 = log(r11736212);
double r11736214 = t;
double r11736215 = r11736213 / r11736214;
double r11736216 = r11736205 - r11736215;
return r11736216;
}
double f(double x, double y, double z, double t) {
double r11736217 = z;
double r11736218 = -1.7774096754001219e-84;
bool r11736219 = r11736217 <= r11736218;
double r11736220 = x;
double r11736221 = expm1(r11736217);
double r11736222 = y;
double r11736223 = 1.0;
double r11736224 = fma(r11736221, r11736222, r11736223);
double r11736225 = sqrt(r11736224);
double r11736226 = log(r11736225);
double r11736227 = r11736226 + r11736226;
double r11736228 = cbrt(r11736227);
double r11736229 = r11736228 * r11736228;
double r11736230 = t;
double r11736231 = r11736230 / r11736228;
double r11736232 = r11736229 / r11736231;
double r11736233 = r11736220 - r11736232;
double r11736234 = sqrt(r11736223);
double r11736235 = log(r11736234);
double r11736236 = r11736235 / r11736230;
double r11736237 = 2.0;
double r11736238 = r11736217 / r11736230;
double r11736239 = r11736222 / r11736223;
double r11736240 = r11736217 * r11736217;
double r11736241 = r11736240 / r11736230;
double r11736242 = 0.5;
double r11736243 = r11736241 * r11736242;
double r11736244 = r11736243 * r11736239;
double r11736245 = fma(r11736238, r11736239, r11736244);
double r11736246 = fma(r11736236, r11736237, r11736245);
double r11736247 = r11736220 - r11736246;
double r11736248 = r11736219 ? r11736233 : r11736247;
return r11736248;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 24.4 |
|---|---|
| Target | 16.6 |
| Herbie | 8.4 |
if z < -1.7774096754001219e-84Initial program 15.2
Simplified12.1
rmApplied add-sqr-sqrt12.1
Applied log-prod12.1
rmApplied add-cube-cbrt12.3
Applied associate-/l*12.3
if -1.7774096754001219e-84 < z Initial program 30.3
Simplified11.6
rmApplied add-sqr-sqrt11.7
Applied log-prod11.7
Taylor expanded around 0 7.0
Simplified6.0
Final simplification8.4
herbie shell --seed 2019164 +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)))