x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\begin{array}{l}
\mathbf{if}\;y \le -1.152892260263348607747194563956545567434 \cdot 10^{210}:\\
\;\;\;\;x - \frac{\log \left(1 + \left({z}^{2} \cdot \left(\frac{1}{2} + z \cdot \frac{1}{6}\right) + z\right) \cdot y\right)}{t}\\
\mathbf{elif}\;y \le -2.469031949062149442410480885508201558103 \cdot 10^{131}:\\
\;\;\;\;x - \left(\frac{\log \left(1 - e^{z}\right)}{t} - \left(1 \cdot \frac{1}{\left(1 - e^{z}\right) \cdot \left(y \cdot t\right)} + \frac{\log \left(\frac{-1}{y}\right)}{t}\right)\right)\\
\mathbf{elif}\;y \le -1.297671033110611467296589409782087111976 \cdot 10^{105}:\\
\;\;\;\;x - \frac{1}{\frac{t}{\log 1 + y \cdot \left(0.5 \cdot {z}^{2} + 1 \cdot z\right)}}\\
\mathbf{elif}\;y \le -6.569041928042183231455829851483351473071 \cdot 10^{103}:\\
\;\;\;\;x - \left(\frac{\log \left(1 - e^{z}\right)}{t} - \left(1 \cdot \frac{1}{\left(1 - e^{z}\right) \cdot \left(y \cdot t\right)} + \frac{\log \left(\frac{-1}{y}\right)}{t}\right)\right)\\
\mathbf{elif}\;y \le 2.445855841223627624785485148522430782767 \cdot 10^{-124}:\\
\;\;\;\;x - \left(\frac{\log \left({1}^{3} + {\left(\left(e^{z} - 1\right) \cdot y\right)}^{3}\right)}{t} - \frac{\log \left(1 \cdot 1 + \left(\left(\left(e^{z} - 1\right) \cdot y\right) \cdot \left(\left(e^{z} - 1\right) \cdot y\right) - 1 \cdot \left(\left(e^{z} - 1\right) \cdot y\right)\right)\right)}{t}\right)\\
\mathbf{elif}\;y \le 1.449609952745778752399845107288990046227 \cdot 10^{165}:\\
\;\;\;\;x - \left(1 \cdot \frac{z \cdot y}{t} + \frac{\log 1}{t}\right)\\
\mathbf{else}:\\
\;\;\;\;x - \frac{\log \left(1 + \left({z}^{2} \cdot \left(\frac{1}{2} + z \cdot \frac{1}{6}\right) + z\right) \cdot y\right)}{t}\\
\end{array}double f(double x, double y, double z, double t) {
double r302026 = x;
double r302027 = 1.0;
double r302028 = y;
double r302029 = r302027 - r302028;
double r302030 = z;
double r302031 = exp(r302030);
double r302032 = r302028 * r302031;
double r302033 = r302029 + r302032;
double r302034 = log(r302033);
double r302035 = t;
double r302036 = r302034 / r302035;
double r302037 = r302026 - r302036;
return r302037;
}
double f(double x, double y, double z, double t) {
double r302038 = y;
double r302039 = -1.1528922602633486e+210;
bool r302040 = r302038 <= r302039;
double r302041 = x;
double r302042 = 1.0;
double r302043 = z;
double r302044 = 2.0;
double r302045 = pow(r302043, r302044);
double r302046 = 0.5;
double r302047 = 0.16666666666666666;
double r302048 = r302043 * r302047;
double r302049 = r302046 + r302048;
double r302050 = r302045 * r302049;
double r302051 = r302050 + r302043;
double r302052 = r302051 * r302038;
double r302053 = r302042 + r302052;
double r302054 = log(r302053);
double r302055 = t;
double r302056 = r302054 / r302055;
double r302057 = r302041 - r302056;
double r302058 = -2.4690319490621494e+131;
bool r302059 = r302038 <= r302058;
double r302060 = 1.0;
double r302061 = exp(r302043);
double r302062 = r302060 - r302061;
double r302063 = log(r302062);
double r302064 = r302063 / r302055;
double r302065 = r302038 * r302055;
double r302066 = r302062 * r302065;
double r302067 = r302060 / r302066;
double r302068 = r302042 * r302067;
double r302069 = -1.0;
double r302070 = r302069 / r302038;
double r302071 = log(r302070);
double r302072 = r302071 / r302055;
double r302073 = r302068 + r302072;
double r302074 = r302064 - r302073;
double r302075 = r302041 - r302074;
double r302076 = -1.2976710331106115e+105;
bool r302077 = r302038 <= r302076;
double r302078 = log(r302042);
double r302079 = 0.5;
double r302080 = r302079 * r302045;
double r302081 = r302042 * r302043;
double r302082 = r302080 + r302081;
double r302083 = r302038 * r302082;
double r302084 = r302078 + r302083;
double r302085 = r302055 / r302084;
double r302086 = r302060 / r302085;
double r302087 = r302041 - r302086;
double r302088 = -6.569041928042183e+103;
bool r302089 = r302038 <= r302088;
double r302090 = 2.4458558412236276e-124;
bool r302091 = r302038 <= r302090;
double r302092 = 3.0;
double r302093 = pow(r302042, r302092);
double r302094 = r302061 - r302060;
double r302095 = r302094 * r302038;
double r302096 = pow(r302095, r302092);
double r302097 = r302093 + r302096;
double r302098 = log(r302097);
double r302099 = r302098 / r302055;
double r302100 = r302042 * r302042;
double r302101 = r302095 * r302095;
double r302102 = r302042 * r302095;
double r302103 = r302101 - r302102;
double r302104 = r302100 + r302103;
double r302105 = log(r302104);
double r302106 = r302105 / r302055;
double r302107 = r302099 - r302106;
double r302108 = r302041 - r302107;
double r302109 = 1.4496099527457788e+165;
bool r302110 = r302038 <= r302109;
double r302111 = r302043 * r302038;
double r302112 = r302111 / r302055;
double r302113 = r302042 * r302112;
double r302114 = r302078 / r302055;
double r302115 = r302113 + r302114;
double r302116 = r302041 - r302115;
double r302117 = r302110 ? r302116 : r302057;
double r302118 = r302091 ? r302108 : r302117;
double r302119 = r302089 ? r302075 : r302118;
double r302120 = r302077 ? r302087 : r302119;
double r302121 = r302059 ? r302075 : r302120;
double r302122 = r302040 ? r302057 : r302121;
return r302122;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 25.6 |
|---|---|
| Target | 16.0 |
| Herbie | 14.3 |
if y < -1.1528922602633486e+210 or 1.4496099527457788e+165 < y Initial program 46.7
rmApplied sub-neg46.7
Applied associate-+l+21.4
Simplified21.3
Taylor expanded around 0 20.7
Simplified20.7
if -1.1528922602633486e+210 < y < -2.4690319490621494e+131 or -1.2976710331106115e+105 < y < -6.569041928042183e+103Initial program 38.0
rmApplied sub-neg38.0
Applied associate-+l+17.9
Simplified17.9
Taylor expanded around -inf 38.0
if -2.4690319490621494e+131 < y < -1.2976710331106115e+105Initial program 41.8
Taylor expanded around 0 25.5
Simplified25.5
rmApplied clear-num25.5
if -6.569041928042183e+103 < y < 2.4458558412236276e-124Initial program 15.3
rmApplied sub-neg15.3
Applied associate-+l+11.0
Simplified11.0
rmApplied flip3-+11.1
Applied log-div11.1
Applied div-sub11.1
if 2.4458558412236276e-124 < y < 1.4496099527457788e+165Initial program 34.9
Taylor expanded around 0 13.0
Simplified13.0
Taylor expanded around 0 10.9
Final simplification14.3
herbie shell --seed 2020001
(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)))