Average Error: 28.6 → 10.7
Time: 40.8s
Precision: 64
\[\frac{\left(\left(\left(x \cdot y + z\right) \cdot y + 27464.7644704999984242022037506103515625\right) \cdot y + 230661.5106160000141244381666183471679688\right) \cdot y + t}{\left(\left(\left(y + a\right) \cdot y + b\right) \cdot y + c\right) \cdot y + i}\]
\[\begin{array}{l} \mathbf{if}\;y \le -1.115442638042938764322347599639232915618 \cdot 10^{44} \lor \neg \left(y \le 5.660347026355407697598823994415316445547 \cdot 10^{100}\right):\\ \;\;\;\;x + \frac{z}{y}\\ \mathbf{else}:\\ \;\;\;\;\left(\left(\left(\left(x \cdot y + z\right) \cdot y + 27464.7644704999984242022037506103515625\right) \cdot y + 230661.5106160000141244381666183471679688\right) \cdot y + t\right) \cdot \frac{1}{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(y + a, y, b\right), y, c\right), y, i\right)}\\ \end{array}\]
\frac{\left(\left(\left(x \cdot y + z\right) \cdot y + 27464.7644704999984242022037506103515625\right) \cdot y + 230661.5106160000141244381666183471679688\right) \cdot y + t}{\left(\left(\left(y + a\right) \cdot y + b\right) \cdot y + c\right) \cdot y + i}
\begin{array}{l}
\mathbf{if}\;y \le -1.115442638042938764322347599639232915618 \cdot 10^{44} \lor \neg \left(y \le 5.660347026355407697598823994415316445547 \cdot 10^{100}\right):\\
\;\;\;\;x + \frac{z}{y}\\

\mathbf{else}:\\
\;\;\;\;\left(\left(\left(\left(x \cdot y + z\right) \cdot y + 27464.7644704999984242022037506103515625\right) \cdot y + 230661.5106160000141244381666183471679688\right) \cdot y + t\right) \cdot \frac{1}{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(y + a, y, b\right), y, c\right), y, i\right)}\\

\end{array}
double f(double x, double y, double z, double t, double a, double b, double c, double i) {
        double r72786 = x;
        double r72787 = y;
        double r72788 = r72786 * r72787;
        double r72789 = z;
        double r72790 = r72788 + r72789;
        double r72791 = r72790 * r72787;
        double r72792 = 27464.7644705;
        double r72793 = r72791 + r72792;
        double r72794 = r72793 * r72787;
        double r72795 = 230661.510616;
        double r72796 = r72794 + r72795;
        double r72797 = r72796 * r72787;
        double r72798 = t;
        double r72799 = r72797 + r72798;
        double r72800 = a;
        double r72801 = r72787 + r72800;
        double r72802 = r72801 * r72787;
        double r72803 = b;
        double r72804 = r72802 + r72803;
        double r72805 = r72804 * r72787;
        double r72806 = c;
        double r72807 = r72805 + r72806;
        double r72808 = r72807 * r72787;
        double r72809 = i;
        double r72810 = r72808 + r72809;
        double r72811 = r72799 / r72810;
        return r72811;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i) {
        double r72812 = y;
        double r72813 = -1.1154426380429388e+44;
        bool r72814 = r72812 <= r72813;
        double r72815 = 5.660347026355408e+100;
        bool r72816 = r72812 <= r72815;
        double r72817 = !r72816;
        bool r72818 = r72814 || r72817;
        double r72819 = x;
        double r72820 = z;
        double r72821 = r72820 / r72812;
        double r72822 = r72819 + r72821;
        double r72823 = r72819 * r72812;
        double r72824 = r72823 + r72820;
        double r72825 = r72824 * r72812;
        double r72826 = 27464.7644705;
        double r72827 = r72825 + r72826;
        double r72828 = r72827 * r72812;
        double r72829 = 230661.510616;
        double r72830 = r72828 + r72829;
        double r72831 = r72830 * r72812;
        double r72832 = t;
        double r72833 = r72831 + r72832;
        double r72834 = 1.0;
        double r72835 = a;
        double r72836 = r72812 + r72835;
        double r72837 = b;
        double r72838 = fma(r72836, r72812, r72837);
        double r72839 = c;
        double r72840 = fma(r72838, r72812, r72839);
        double r72841 = i;
        double r72842 = fma(r72840, r72812, r72841);
        double r72843 = r72834 / r72842;
        double r72844 = r72833 * r72843;
        double r72845 = r72818 ? r72822 : r72844;
        return r72845;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Bits error versus b

Bits error versus c

Bits error versus i

Derivation

  1. Split input into 2 regimes
  2. if y < -1.1154426380429388e+44 or 5.660347026355408e+100 < y

    1. Initial program 62.6

      \[\frac{\left(\left(\left(x \cdot y + z\right) \cdot y + 27464.7644704999984242022037506103515625\right) \cdot y + 230661.5106160000141244381666183471679688\right) \cdot y + t}{\left(\left(\left(y + a\right) \cdot y + b\right) \cdot y + c\right) \cdot y + i}\]
    2. Using strategy rm
    3. Applied add-cube-cbrt62.6

      \[\leadsto \frac{\left(\left(\left(x \cdot y + z\right) \cdot y + 27464.7644704999984242022037506103515625\right) \cdot y + 230661.5106160000141244381666183471679688\right) \cdot y + t}{\color{blue}{\left(\sqrt[3]{\left(\left(\left(y + a\right) \cdot y + b\right) \cdot y + c\right) \cdot y + i} \cdot \sqrt[3]{\left(\left(\left(y + a\right) \cdot y + b\right) \cdot y + c\right) \cdot y + i}\right) \cdot \sqrt[3]{\left(\left(\left(y + a\right) \cdot y + b\right) \cdot y + c\right) \cdot y + i}}}\]
    4. Applied associate-/r*62.6

      \[\leadsto \color{blue}{\frac{\frac{\left(\left(\left(x \cdot y + z\right) \cdot y + 27464.7644704999984242022037506103515625\right) \cdot y + 230661.5106160000141244381666183471679688\right) \cdot y + t}{\sqrt[3]{\left(\left(\left(y + a\right) \cdot y + b\right) \cdot y + c\right) \cdot y + i} \cdot \sqrt[3]{\left(\left(\left(y + a\right) \cdot y + b\right) \cdot y + c\right) \cdot y + i}}}{\sqrt[3]{\left(\left(\left(y + a\right) \cdot y + b\right) \cdot y + c\right) \cdot y + i}}}\]
    5. Simplified62.6

      \[\leadsto \frac{\color{blue}{\frac{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(x, y, z\right), y, 27464.7644704999984242022037506103515625\right), y, 230661.5106160000141244381666183471679688\right), y, t\right)}{\sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(y + a, y, b\right), y, c\right), y, i\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(y + a, y, b\right), y, c\right), y, i\right)}}}}{\sqrt[3]{\left(\left(\left(y + a\right) \cdot y + b\right) \cdot y + c\right) \cdot y + i}}\]
    6. Using strategy rm
    7. Applied associate-/r*62.6

      \[\leadsto \frac{\color{blue}{\frac{\frac{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(x, y, z\right), y, 27464.7644704999984242022037506103515625\right), y, 230661.5106160000141244381666183471679688\right), y, t\right)}{\sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(y + a, y, b\right), y, c\right), y, i\right)}}}{\sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(y + a, y, b\right), y, c\right), y, i\right)}}}}{\sqrt[3]{\left(\left(\left(y + a\right) \cdot y + b\right) \cdot y + c\right) \cdot y + i}}\]
    8. Taylor expanded around inf 16.7

      \[\leadsto \color{blue}{x + \frac{z}{y}}\]

    if -1.1154426380429388e+44 < y < 5.660347026355408e+100

    1. Initial program 6.7

      \[\frac{\left(\left(\left(x \cdot y + z\right) \cdot y + 27464.7644704999984242022037506103515625\right) \cdot y + 230661.5106160000141244381666183471679688\right) \cdot y + t}{\left(\left(\left(y + a\right) \cdot y + b\right) \cdot y + c\right) \cdot y + i}\]
    2. Using strategy rm
    3. Applied div-inv6.8

      \[\leadsto \color{blue}{\left(\left(\left(\left(x \cdot y + z\right) \cdot y + 27464.7644704999984242022037506103515625\right) \cdot y + 230661.5106160000141244381666183471679688\right) \cdot y + t\right) \cdot \frac{1}{\left(\left(\left(y + a\right) \cdot y + b\right) \cdot y + c\right) \cdot y + i}}\]
    4. Simplified6.8

      \[\leadsto \left(\left(\left(\left(x \cdot y + z\right) \cdot y + 27464.7644704999984242022037506103515625\right) \cdot y + 230661.5106160000141244381666183471679688\right) \cdot y + t\right) \cdot \color{blue}{\frac{1}{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(y + a, y, b\right), y, c\right), y, i\right)}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification10.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le -1.115442638042938764322347599639232915618 \cdot 10^{44} \lor \neg \left(y \le 5.660347026355407697598823994415316445547 \cdot 10^{100}\right):\\ \;\;\;\;x + \frac{z}{y}\\ \mathbf{else}:\\ \;\;\;\;\left(\left(\left(\left(x \cdot y + z\right) \cdot y + 27464.7644704999984242022037506103515625\right) \cdot y + 230661.5106160000141244381666183471679688\right) \cdot y + t\right) \cdot \frac{1}{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(y + a, y, b\right), y, c\right), y, i\right)}\\ \end{array}\]

Reproduce

herbie shell --seed 2019325 +o rules:numerics
(FPCore (x y z t a b c i)
  :name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2"
  :precision binary64
  (/ (+ (* (+ (* (+ (* (+ (* x y) z) y) 27464.7644705) y) 230661.510616) y) t) (+ (* (+ (* (+ (* (+ y a) y) b) y) c) y) i)))