Average Error: 25.3 → 8.5
Time: 27.7s
Precision: 64
\[x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\]
\[\begin{array}{l} \mathbf{if}\;z \le -1.788149422936711126217649570543650854038 \cdot 10^{-10}:\\ \;\;\;\;x - \log \left(e^{z} \cdot y + \left(1 - y\right)\right) \cdot \frac{1}{t}\\ \mathbf{elif}\;z \le 1.548199489295338911120653686915655113605 \cdot 10^{-142}:\\ \;\;\;\;x - \frac{1}{\frac{1}{\frac{\mathsf{fma}\left(y \cdot z, \mathsf{fma}\left(z, 0.5, 1\right), \log 1\right)}{t}}}\\ \mathbf{elif}\;z \le 4.70552617509855223204263570258364278042 \cdot 10^{-18}:\\ \;\;\;\;x - \frac{\log \left(\mathsf{fma}\left(z, y, \mathsf{fma}\left(\frac{1}{2}, z \cdot \left(y \cdot z\right), 1\right)\right)\right)}{t}\\ \mathbf{else}:\\ \;\;\;\;x - \mathsf{fma}\left(\frac{z}{\frac{t}{y}}, 1, \mathsf{fma}\left(\frac{{z}^{2}}{\frac{t}{y}}, 0.5, \frac{\log 1}{t}\right)\right)\\ \end{array}\]
x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}
\begin{array}{l}
\mathbf{if}\;z \le -1.788149422936711126217649570543650854038 \cdot 10^{-10}:\\
\;\;\;\;x - \log \left(e^{z} \cdot y + \left(1 - y\right)\right) \cdot \frac{1}{t}\\

\mathbf{elif}\;z \le 1.548199489295338911120653686915655113605 \cdot 10^{-142}:\\
\;\;\;\;x - \frac{1}{\frac{1}{\frac{\mathsf{fma}\left(y \cdot z, \mathsf{fma}\left(z, 0.5, 1\right), \log 1\right)}{t}}}\\

\mathbf{elif}\;z \le 4.70552617509855223204263570258364278042 \cdot 10^{-18}:\\
\;\;\;\;x - \frac{\log \left(\mathsf{fma}\left(z, y, \mathsf{fma}\left(\frac{1}{2}, z \cdot \left(y \cdot z\right), 1\right)\right)\right)}{t}\\

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

\end{array}
double f(double x, double y, double z, double t) {
        double r230141 = x;
        double r230142 = 1.0;
        double r230143 = y;
        double r230144 = r230142 - r230143;
        double r230145 = z;
        double r230146 = exp(r230145);
        double r230147 = r230143 * r230146;
        double r230148 = r230144 + r230147;
        double r230149 = log(r230148);
        double r230150 = t;
        double r230151 = r230149 / r230150;
        double r230152 = r230141 - r230151;
        return r230152;
}

double f(double x, double y, double z, double t) {
        double r230153 = z;
        double r230154 = -1.788149422936711e-10;
        bool r230155 = r230153 <= r230154;
        double r230156 = x;
        double r230157 = exp(r230153);
        double r230158 = y;
        double r230159 = r230157 * r230158;
        double r230160 = 1.0;
        double r230161 = r230160 - r230158;
        double r230162 = r230159 + r230161;
        double r230163 = log(r230162);
        double r230164 = 1.0;
        double r230165 = t;
        double r230166 = r230164 / r230165;
        double r230167 = r230163 * r230166;
        double r230168 = r230156 - r230167;
        double r230169 = 1.548199489295339e-142;
        bool r230170 = r230153 <= r230169;
        double r230171 = r230158 * r230153;
        double r230172 = 0.5;
        double r230173 = fma(r230153, r230172, r230160);
        double r230174 = log(r230160);
        double r230175 = fma(r230171, r230173, r230174);
        double r230176 = r230175 / r230165;
        double r230177 = r230164 / r230176;
        double r230178 = r230164 / r230177;
        double r230179 = r230156 - r230178;
        double r230180 = 4.705526175098552e-18;
        bool r230181 = r230153 <= r230180;
        double r230182 = 0.5;
        double r230183 = r230153 * r230171;
        double r230184 = fma(r230182, r230183, r230160);
        double r230185 = fma(r230153, r230158, r230184);
        double r230186 = log(r230185);
        double r230187 = r230186 / r230165;
        double r230188 = r230156 - r230187;
        double r230189 = r230165 / r230158;
        double r230190 = r230153 / r230189;
        double r230191 = 2.0;
        double r230192 = pow(r230153, r230191);
        double r230193 = r230192 / r230189;
        double r230194 = r230174 / r230165;
        double r230195 = fma(r230193, r230172, r230194);
        double r230196 = fma(r230190, r230160, r230195);
        double r230197 = r230156 - r230196;
        double r230198 = r230181 ? r230188 : r230197;
        double r230199 = r230170 ? r230179 : r230198;
        double r230200 = r230155 ? r230168 : r230199;
        return r230200;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

Original25.3
Target16.1
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 4 regimes
  2. if z < -1.788149422936711e-10

    1. Initial program 11.1

      \[x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\]
    2. Using strategy rm
    3. Applied div-inv11.1

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

    if -1.788149422936711e-10 < z < 1.548199489295339e-142

    1. Initial program 31.9

      \[x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\]
    2. Taylor expanded around 0 5.8

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

      \[\leadsto x - \frac{\color{blue}{\mathsf{fma}\left(y, \mathsf{fma}\left(z \cdot z, 0.5, z \cdot 1\right), \log 1\right)}}{t}\]
    4. Using strategy rm
    5. Applied clear-num5.8

      \[\leadsto x - \color{blue}{\frac{1}{\frac{t}{\mathsf{fma}\left(y, \mathsf{fma}\left(z \cdot z, 0.5, z \cdot 1\right), \log 1\right)}}}\]
    6. Simplified5.8

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

      \[\leadsto x - \frac{1}{\frac{t}{\color{blue}{\left(\sqrt[3]{\mathsf{fma}\left(y \cdot z, \mathsf{fma}\left(z, 0.5, 1\right), \log 1\right)} \cdot \sqrt[3]{\mathsf{fma}\left(y \cdot z, \mathsf{fma}\left(z, 0.5, 1\right), \log 1\right)}\right) \cdot \sqrt[3]{\mathsf{fma}\left(y \cdot z, \mathsf{fma}\left(z, 0.5, 1\right), \log 1\right)}}}}\]
    9. Using strategy rm
    10. Applied clear-num6.0

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

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

    if 1.548199489295339e-142 < z < 4.705526175098552e-18

    1. Initial program 31.5

      \[x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\]
    2. Taylor expanded around 0 11.5

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

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

    if 4.705526175098552e-18 < z

    1. Initial program 24.3

      \[x - \frac{\log \left(\left(1 - y\right) + y \cdot e^{z}\right)}{t}\]
    2. Taylor expanded around 0 20.0

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

      \[\leadsto x - \frac{\color{blue}{\mathsf{fma}\left(y, \mathsf{fma}\left(z \cdot z, 0.5, z \cdot 1\right), \log 1\right)}}{t}\]
    4. Using strategy rm
    5. Applied clear-num20.0

      \[\leadsto x - \color{blue}{\frac{1}{\frac{t}{\mathsf{fma}\left(y, \mathsf{fma}\left(z \cdot z, 0.5, z \cdot 1\right), \log 1\right)}}}\]
    6. Simplified20.0

      \[\leadsto x - \frac{1}{\color{blue}{\frac{t}{\mathsf{fma}\left(y \cdot z, \mathsf{fma}\left(z, 0.5, 1\right), \log 1\right)}}}\]
    7. Taylor expanded around inf 20.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -1.788149422936711126217649570543650854038 \cdot 10^{-10}:\\ \;\;\;\;x - \log \left(e^{z} \cdot y + \left(1 - y\right)\right) \cdot \frac{1}{t}\\ \mathbf{elif}\;z \le 1.548199489295338911120653686915655113605 \cdot 10^{-142}:\\ \;\;\;\;x - \frac{1}{\frac{1}{\frac{\mathsf{fma}\left(y \cdot z, \mathsf{fma}\left(z, 0.5, 1\right), \log 1\right)}{t}}}\\ \mathbf{elif}\;z \le 4.70552617509855223204263570258364278042 \cdot 10^{-18}:\\ \;\;\;\;x - \frac{\log \left(\mathsf{fma}\left(z, y, \mathsf{fma}\left(\frac{1}{2}, z \cdot \left(y \cdot z\right), 1\right)\right)\right)}{t}\\ \mathbf{else}:\\ \;\;\;\;x - \mathsf{fma}\left(\frac{z}{\frac{t}{y}}, 1, \mathsf{fma}\left(\frac{{z}^{2}}{\frac{t}{y}}, 0.5, \frac{\log 1}{t}\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019194 +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)))