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 - \left(\sqrt[3]{\mathsf{fma}\left(1, \left(y \cdot \frac{\sqrt[3]{z}}{\sqrt[3]{t}}\right) \cdot \frac{\sqrt[3]{z} \cdot \sqrt[3]{z}}{\sqrt[3]{t} \cdot \sqrt[3]{t}}, \mathsf{fma}\left(\frac{z \cdot \left(y \cdot z\right)}{t}, 0.5, \frac{\log 1}{t}\right)\right)} \cdot \sqrt[3]{\mathsf{fma}\left(1, \left(y \cdot \frac{\sqrt[3]{z}}{\sqrt[3]{t}}\right) \cdot \frac{\sqrt[3]{z} \cdot \sqrt[3]{z}}{\sqrt[3]{t} \cdot \sqrt[3]{t}}, \mathsf{fma}\left(\frac{z \cdot \left(y \cdot z\right)}{t}, 0.5, \frac{\log 1}{t}\right)\right)}\right) \cdot \left(\sqrt[3]{\sqrt[3]{\mathsf{fma}\left(1, \left(y \cdot \frac{\sqrt[3]{z}}{\sqrt[3]{t}}\right) \cdot \frac{\sqrt[3]{z} \cdot \sqrt[3]{z}}{\sqrt[3]{t} \cdot \sqrt[3]{t}}, \mathsf{fma}\left(\frac{z \cdot \left(y \cdot z\right)}{t}, 0.5, \frac{\log 1}{t}\right)\right)}} \cdot \left(\sqrt[3]{\sqrt[3]{\mathsf{fma}\left(1, \left(y \cdot \frac{\sqrt[3]{z}}{\sqrt[3]{t}}\right) \cdot \frac{\sqrt[3]{z} \cdot \sqrt[3]{z}}{\sqrt[3]{t} \cdot \sqrt[3]{t}}, \mathsf{fma}\left(\frac{z \cdot \left(y \cdot z\right)}{t}, 0.5, \frac{\log 1}{t}\right)\right)}} \cdot \sqrt[3]{\sqrt[3]{\mathsf{fma}\left(1, \left(y \cdot \frac{\sqrt[3]{z}}{\sqrt[3]{t}}\right) \cdot \frac{\sqrt[3]{z} \cdot \sqrt[3]{z}}{\sqrt[3]{t} \cdot \sqrt[3]{t}}, \mathsf{fma}\left(\frac{z \cdot \left(y \cdot z\right)}{t}, 0.5, \frac{\log 1}{t}\right)\right)}}\right)\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r12658914 = x;
double r12658915 = 1.0;
double r12658916 = y;
double r12658917 = r12658915 - r12658916;
double r12658918 = z;
double r12658919 = exp(r12658918);
double r12658920 = r12658916 * r12658919;
double r12658921 = r12658917 + r12658920;
double r12658922 = log(r12658921);
double r12658923 = t;
double r12658924 = r12658922 / r12658923;
double r12658925 = r12658914 - r12658924;
return r12658925;
}
double f(double x, double y, double z, double t) {
double r12658926 = z;
double r12658927 = exp(r12658926);
double r12658928 = 0.9999999353825346;
bool r12658929 = r12658927 <= r12658928;
double r12658930 = x;
double r12658931 = y;
double r12658932 = 1.0;
double r12658933 = r12658932 - r12658931;
double r12658934 = fma(r12658931, r12658927, r12658933);
double r12658935 = log(r12658934);
double r12658936 = t;
double r12658937 = cbrt(r12658936);
double r12658938 = r12658937 * r12658937;
double r12658939 = r12658935 / r12658938;
double r12658940 = r12658939 / r12658937;
double r12658941 = r12658930 - r12658940;
double r12658942 = cbrt(r12658926);
double r12658943 = r12658942 / r12658937;
double r12658944 = r12658931 * r12658943;
double r12658945 = r12658942 * r12658942;
double r12658946 = r12658945 / r12658938;
double r12658947 = r12658944 * r12658946;
double r12658948 = r12658931 * r12658926;
double r12658949 = r12658926 * r12658948;
double r12658950 = r12658949 / r12658936;
double r12658951 = 0.5;
double r12658952 = log(r12658932);
double r12658953 = r12658952 / r12658936;
double r12658954 = fma(r12658950, r12658951, r12658953);
double r12658955 = fma(r12658932, r12658947, r12658954);
double r12658956 = cbrt(r12658955);
double r12658957 = r12658956 * r12658956;
double r12658958 = cbrt(r12658956);
double r12658959 = r12658958 * r12658958;
double r12658960 = r12658958 * r12658959;
double r12658961 = r12658957 * r12658960;
double r12658962 = r12658930 - r12658961;
double r12658963 = r12658929 ? r12658941 : r12658962;
return r12658963;
}




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
Simplified6.5
rmApplied add-cube-cbrt6.7
Applied add-cube-cbrt6.8
Applied times-frac6.8
Applied associate-*l*6.5
rmApplied add-cube-cbrt6.5
rmApplied add-cube-cbrt6.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)))