x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\begin{array}{l}
\mathbf{if}\;z \le -1.910423669767732067232418602387156170153 \cdot 10^{-4}:\\
\;\;\;\;x - \frac{\log \left(\left(y \cdot e^{z} - y\right) + 1\right)}{t}\\
\mathbf{elif}\;z \le -6.320708783077287419620562923534616061602 \cdot 10^{-143}:\\
\;\;\;\;x - \frac{\log \left(\left(\left(z + \frac{1}{6} \cdot \left(z \cdot \left(z \cdot z\right)\right)\right) + \left(z \cdot z\right) \cdot \frac{1}{2}\right) \cdot y + 1\right)}{t}\\
\mathbf{elif}\;z \le 1.650990275674465671078628579622610486763 \cdot 10^{-159}:\\
\;\;\;\;x - \left(\frac{\log 1}{t} + \frac{y \cdot z}{t} \cdot 1\right)\\
\mathbf{else}:\\
\;\;\;\;x - \frac{\log \left(\left(\left(z + \frac{1}{6} \cdot \left(z \cdot \left(z \cdot z\right)\right)\right) + \left(z \cdot z\right) \cdot \frac{1}{2}\right) \cdot y + 1\right)}{t}\\
\end{array}double f(double x, double y, double z, double t) {
double r17436776 = x;
double r17436777 = 1.0;
double r17436778 = y;
double r17436779 = r17436777 - r17436778;
double r17436780 = z;
double r17436781 = exp(r17436780);
double r17436782 = r17436778 * r17436781;
double r17436783 = r17436779 + r17436782;
double r17436784 = log(r17436783);
double r17436785 = t;
double r17436786 = r17436784 / r17436785;
double r17436787 = r17436776 - r17436786;
return r17436787;
}
double f(double x, double y, double z, double t) {
double r17436788 = z;
double r17436789 = -0.0001910423669767732;
bool r17436790 = r17436788 <= r17436789;
double r17436791 = x;
double r17436792 = y;
double r17436793 = exp(r17436788);
double r17436794 = r17436792 * r17436793;
double r17436795 = r17436794 - r17436792;
double r17436796 = 1.0;
double r17436797 = r17436795 + r17436796;
double r17436798 = log(r17436797);
double r17436799 = t;
double r17436800 = r17436798 / r17436799;
double r17436801 = r17436791 - r17436800;
double r17436802 = -6.320708783077287e-143;
bool r17436803 = r17436788 <= r17436802;
double r17436804 = 0.16666666666666666;
double r17436805 = r17436788 * r17436788;
double r17436806 = r17436788 * r17436805;
double r17436807 = r17436804 * r17436806;
double r17436808 = r17436788 + r17436807;
double r17436809 = 0.5;
double r17436810 = r17436805 * r17436809;
double r17436811 = r17436808 + r17436810;
double r17436812 = r17436811 * r17436792;
double r17436813 = r17436812 + r17436796;
double r17436814 = log(r17436813);
double r17436815 = r17436814 / r17436799;
double r17436816 = r17436791 - r17436815;
double r17436817 = 1.6509902756744657e-159;
bool r17436818 = r17436788 <= r17436817;
double r17436819 = log(r17436796);
double r17436820 = r17436819 / r17436799;
double r17436821 = r17436792 * r17436788;
double r17436822 = r17436821 / r17436799;
double r17436823 = r17436822 * r17436796;
double r17436824 = r17436820 + r17436823;
double r17436825 = r17436791 - r17436824;
double r17436826 = r17436818 ? r17436825 : r17436816;
double r17436827 = r17436803 ? r17436816 : r17436826;
double r17436828 = r17436790 ? r17436801 : r17436827;
return r17436828;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 25.0 |
|---|---|
| Target | 16.2 |
| Herbie | 8.5 |
if z < -0.0001910423669767732Initial program 11.5
rmApplied sub-neg11.5
Applied associate-+l+11.5
Simplified11.5
if -0.0001910423669767732 < z < -6.320708783077287e-143 or 1.6509902756744657e-159 < z Initial program 29.5
rmApplied sub-neg29.5
Applied associate-+l+18.5
Simplified18.5
Taylor expanded around 0 11.5
Simplified11.5
if -6.320708783077287e-143 < z < 1.6509902756744657e-159Initial program 31.8
Taylor expanded around 0 3.8
Final simplification8.5
herbie shell --seed 2019171
(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)))