x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\begin{array}{l}
\mathbf{if}\;e^{z} \le 0.9999999353825346215529634719132445752621:\\
\;\;\;\;x - \frac{\frac{\log \left(\mathsf{fma}\left(y, e^{z}, 1 - y\right)\right)}{\sqrt[3]{t} \cdot \sqrt[3]{t}}}{\sqrt[3]{t}}\\
\mathbf{else}:\\
\;\;\;\;x - \mathsf{fma}\left(1, \frac{z}{t} \cdot y, \frac{\log 1}{t}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r23414998 = x;
double r23414999 = 1.0;
double r23415000 = y;
double r23415001 = r23414999 - r23415000;
double r23415002 = z;
double r23415003 = exp(r23415002);
double r23415004 = r23415000 * r23415003;
double r23415005 = r23415001 + r23415004;
double r23415006 = log(r23415005);
double r23415007 = t;
double r23415008 = r23415006 / r23415007;
double r23415009 = r23414998 - r23415008;
return r23415009;
}
double f(double x, double y, double z, double t) {
double r23415010 = z;
double r23415011 = exp(r23415010);
double r23415012 = 0.9999999353825346;
bool r23415013 = r23415011 <= r23415012;
double r23415014 = x;
double r23415015 = y;
double r23415016 = 1.0;
double r23415017 = r23415016 - r23415015;
double r23415018 = fma(r23415015, r23415011, r23415017);
double r23415019 = log(r23415018);
double r23415020 = t;
double r23415021 = cbrt(r23415020);
double r23415022 = r23415021 * r23415021;
double r23415023 = r23415019 / r23415022;
double r23415024 = r23415023 / r23415021;
double r23415025 = r23415014 - r23415024;
double r23415026 = r23415010 / r23415020;
double r23415027 = r23415026 * r23415015;
double r23415028 = log(r23415016);
double r23415029 = r23415028 / r23415020;
double r23415030 = fma(r23415016, r23415027, r23415029);
double r23415031 = r23415014 - r23415030;
double r23415032 = r23415013 ? r23415025 : r23415031;
return r23415032;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 25.4 |
|---|---|
| Target | 16.4 |
| Herbie | 8.1 |
if (exp z) < 0.9999999353825346Initial program 11.2
Simplified11.2
rmApplied add-cube-cbrt11.4
Applied associate-/r*11.4
if 0.9999999353825346 < (exp z) Initial program 31.8
Simplified31.8
Taylor expanded around 0 7.2
Simplified7.2
Taylor expanded around 0 7.3
Simplified7.3
rmApplied div-inv7.3
rmApplied pow17.3
Applied pow17.3
Applied pow17.3
Applied pow-prod-down7.3
Applied pow-prod-down7.3
Simplified6.6
Final simplification8.1
herbie shell --seed 2019174 +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)))