Average Error: 25.3 → 8.5
Time: 24.6s
Precision: 64
\[x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\]
\[\begin{array}{l} \mathbf{if}\;z \le -1996524655068977.75:\\ \;\;\;\;x - \frac{\log \left(\sqrt{\mathsf{fma}\left(e^{z}, y, 1 - y\right)}\right) + \log \left(\sqrt{\mathsf{fma}\left(e^{z}, y, 1 - y\right)}\right)}{t}\\ \mathbf{elif}\;z \le 8.257479803818375788788539194002137756388 \cdot 10^{-61}:\\ \;\;\;\;x - \mathsf{fma}\left(1, \frac{z}{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \frac{y}{\sqrt[3]{t}}, \frac{\log 1}{t}\right)\\ \mathbf{else}:\\ \;\;\;\;x - \frac{\log \left(\mathsf{fma}\left(y, \mathsf{fma}\left(\frac{1}{2} \cdot z, z, z\right), 1\right)\right)}{t}\\ \end{array}\]
x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}
\begin{array}{l}
\mathbf{if}\;z \le -1996524655068977.75:\\
\;\;\;\;x - \frac{\log \left(\sqrt{\mathsf{fma}\left(e^{z}, y, 1 - y\right)}\right) + \log \left(\sqrt{\mathsf{fma}\left(e^{z}, y, 1 - y\right)}\right)}{t}\\

\mathbf{elif}\;z \le 8.257479803818375788788539194002137756388 \cdot 10^{-61}:\\
\;\;\;\;x - \mathsf{fma}\left(1, \frac{z}{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \frac{y}{\sqrt[3]{t}}, \frac{\log 1}{t}\right)\\

\mathbf{else}:\\
\;\;\;\;x - \frac{\log \left(\mathsf{fma}\left(y, \mathsf{fma}\left(\frac{1}{2} \cdot z, z, z\right), 1\right)\right)}{t}\\

\end{array}
double f(double x, double y, double z, double t) {
        double r158937 = x;
        double r158938 = 1.0;
        double r158939 = y;
        double r158940 = r158938 - r158939;
        double r158941 = z;
        double r158942 = exp(r158941);
        double r158943 = r158939 * r158942;
        double r158944 = r158940 + r158943;
        double r158945 = log(r158944);
        double r158946 = t;
        double r158947 = r158945 / r158946;
        double r158948 = r158937 - r158947;
        return r158948;
}

double f(double x, double y, double z, double t) {
        double r158949 = z;
        double r158950 = -1996524655068977.8;
        bool r158951 = r158949 <= r158950;
        double r158952 = x;
        double r158953 = exp(r158949);
        double r158954 = y;
        double r158955 = 1.0;
        double r158956 = r158955 - r158954;
        double r158957 = fma(r158953, r158954, r158956);
        double r158958 = sqrt(r158957);
        double r158959 = log(r158958);
        double r158960 = r158959 + r158959;
        double r158961 = t;
        double r158962 = r158960 / r158961;
        double r158963 = r158952 - r158962;
        double r158964 = 8.257479803818376e-61;
        bool r158965 = r158949 <= r158964;
        double r158966 = cbrt(r158961);
        double r158967 = r158966 * r158966;
        double r158968 = r158949 / r158967;
        double r158969 = r158954 / r158966;
        double r158970 = r158968 * r158969;
        double r158971 = log(r158955);
        double r158972 = r158971 / r158961;
        double r158973 = fma(r158955, r158970, r158972);
        double r158974 = r158952 - r158973;
        double r158975 = 0.5;
        double r158976 = r158975 * r158949;
        double r158977 = fma(r158976, r158949, r158949);
        double r158978 = fma(r158954, r158977, r158955);
        double r158979 = log(r158978);
        double r158980 = r158979 / r158961;
        double r158981 = r158952 - r158980;
        double r158982 = r158965 ? r158974 : r158981;
        double r158983 = r158951 ? r158963 : r158982;
        return r158983;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

Original25.3
Target16.4
Herbie8.5
\[\begin{array}{l} \mathbf{if}\;z \lt -2.887462308820794658905265984545350618896 \cdot 10^{119}:\\ \;\;\;\;\left(x - \frac{\frac{-0.5}{y \cdot t}}{z \cdot z}\right) - \frac{-0.5}{y \cdot t} \cdot \frac{\frac{2}{z}}{z \cdot z}\\ \mathbf{else}:\\ \;\;\;\;x - \frac{\log \left(1 + z \cdot y\right)}{t}\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if z < -1996524655068977.8

    1. Initial program 12.1

      \[x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\]
    2. Simplified12.1

      \[\leadsto \color{blue}{x - \frac{\log \left(\mathsf{fma}\left(e^{z}, y, 1 - y\right)\right)}{t}}\]
    3. Using strategy rm
    4. Applied add-sqr-sqrt12.1

      \[\leadsto x - \frac{\log \color{blue}{\left(\sqrt{\mathsf{fma}\left(e^{z}, y, 1 - y\right)} \cdot \sqrt{\mathsf{fma}\left(e^{z}, y, 1 - y\right)}\right)}}{t}\]
    5. Applied log-prod12.1

      \[\leadsto x - \frac{\color{blue}{\log \left(\sqrt{\mathsf{fma}\left(e^{z}, y, 1 - y\right)}\right) + \log \left(\sqrt{\mathsf{fma}\left(e^{z}, y, 1 - y\right)}\right)}}{t}\]

    if -1996524655068977.8 < z < 8.257479803818376e-61

    1. Initial program 30.5

      \[x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\]
    2. Simplified30.5

      \[\leadsto \color{blue}{x - \frac{\log \left(\mathsf{fma}\left(e^{z}, y, 1 - y\right)\right)}{t}}\]
    3. Taylor expanded around 0 6.7

      \[\leadsto \color{blue}{x - \left(1 \cdot \frac{z \cdot y}{t} + \frac{\log 1}{t}\right)}\]
    4. Simplified6.7

      \[\leadsto \color{blue}{x - \mathsf{fma}\left(1, \frac{z \cdot y}{t}, \frac{\log 1}{t}\right)}\]
    5. Using strategy rm
    6. Applied add-cube-cbrt6.8

      \[\leadsto x - \mathsf{fma}\left(1, \frac{z \cdot y}{\color{blue}{\left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right) \cdot \sqrt[3]{t}}}, \frac{\log 1}{t}\right)\]
    7. Applied times-frac6.4

      \[\leadsto x - \mathsf{fma}\left(1, \color{blue}{\frac{z}{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \frac{y}{\sqrt[3]{t}}}, \frac{\log 1}{t}\right)\]

    if 8.257479803818376e-61 < z

    1. Initial program 29.8

      \[x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\]
    2. Simplified29.8

      \[\leadsto \color{blue}{x - \frac{\log \left(\mathsf{fma}\left(e^{z}, y, 1 - y\right)\right)}{t}}\]
    3. Taylor expanded around 0 14.1

      \[\leadsto x - \frac{\log \color{blue}{\left(\frac{1}{2} \cdot \left({z}^{2} \cdot y\right) + \left(z \cdot y + 1\right)\right)}}{t}\]
    4. Simplified14.1

      \[\leadsto x - \frac{\log \color{blue}{\left(\mathsf{fma}\left(y, \mathsf{fma}\left(\frac{1}{2} \cdot z, z, z\right), 1\right)\right)}}{t}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification8.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -1996524655068977.75:\\ \;\;\;\;x - \frac{\log \left(\sqrt{\mathsf{fma}\left(e^{z}, y, 1 - y\right)}\right) + \log \left(\sqrt{\mathsf{fma}\left(e^{z}, y, 1 - y\right)}\right)}{t}\\ \mathbf{elif}\;z \le 8.257479803818375788788539194002137756388 \cdot 10^{-61}:\\ \;\;\;\;x - \mathsf{fma}\left(1, \frac{z}{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \frac{y}{\sqrt[3]{t}}, \frac{\log 1}{t}\right)\\ \mathbf{else}:\\ \;\;\;\;x - \frac{\log \left(\mathsf{fma}\left(y, \mathsf{fma}\left(\frac{1}{2} \cdot z, z, z\right), 1\right)\right)}{t}\\ \end{array}\]

Reproduce

herbie shell --seed 2019208 +o rules:numerics
(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.88746230882079466e119) (- (- 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)))