Average Error: 20.3 → 0.2
Time: 19.5s
Precision: 64
\[x + \frac{y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\]
\[\begin{array}{l} \mathbf{if}\;z \le -0.6121835230050514109478854152257554233074 \lor \neg \left(z \le 125942949.1297363936901092529296875\right):\\ \;\;\;\;\mathsf{fma}\left(\frac{y}{z}, 0.07512208616047560960637952121032867580652, \mathsf{fma}\left(0.06929105992918889456166908757950295694172, y, x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{y}{\mathsf{fma}\left(z + 6.012459259764103336465268512256443500519, z, 3.350343815022303939343828460550867021084\right)}, \left(\sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right)}\right) \cdot e^{\log \left(\sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right)}\right)}, x\right)\\ \end{array}\]
x + \frac{y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}
\begin{array}{l}
\mathbf{if}\;z \le -0.6121835230050514109478854152257554233074 \lor \neg \left(z \le 125942949.1297363936901092529296875\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{z}, 0.07512208616047560960637952121032867580652, \mathsf{fma}\left(0.06929105992918889456166908757950295694172, y, x\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{\mathsf{fma}\left(z + 6.012459259764103336465268512256443500519, z, 3.350343815022303939343828460550867021084\right)}, \left(\sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right)}\right) \cdot e^{\log \left(\sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right)}\right)}, x\right)\\

\end{array}
double f(double x, double y, double z) {
        double r245854 = x;
        double r245855 = y;
        double r245856 = z;
        double r245857 = 0.0692910599291889;
        double r245858 = r245856 * r245857;
        double r245859 = 0.4917317610505968;
        double r245860 = r245858 + r245859;
        double r245861 = r245860 * r245856;
        double r245862 = 0.279195317918525;
        double r245863 = r245861 + r245862;
        double r245864 = r245855 * r245863;
        double r245865 = 6.012459259764103;
        double r245866 = r245856 + r245865;
        double r245867 = r245866 * r245856;
        double r245868 = 3.350343815022304;
        double r245869 = r245867 + r245868;
        double r245870 = r245864 / r245869;
        double r245871 = r245854 + r245870;
        return r245871;
}

double f(double x, double y, double z) {
        double r245872 = z;
        double r245873 = -0.6121835230050514;
        bool r245874 = r245872 <= r245873;
        double r245875 = 125942949.1297364;
        bool r245876 = r245872 <= r245875;
        double r245877 = !r245876;
        bool r245878 = r245874 || r245877;
        double r245879 = y;
        double r245880 = r245879 / r245872;
        double r245881 = 0.07512208616047561;
        double r245882 = 0.0692910599291889;
        double r245883 = x;
        double r245884 = fma(r245882, r245879, r245883);
        double r245885 = fma(r245880, r245881, r245884);
        double r245886 = 6.012459259764103;
        double r245887 = r245872 + r245886;
        double r245888 = 3.350343815022304;
        double r245889 = fma(r245887, r245872, r245888);
        double r245890 = r245879 / r245889;
        double r245891 = 0.4917317610505968;
        double r245892 = fma(r245872, r245882, r245891);
        double r245893 = 0.279195317918525;
        double r245894 = fma(r245892, r245872, r245893);
        double r245895 = cbrt(r245894);
        double r245896 = r245895 * r245895;
        double r245897 = log(r245895);
        double r245898 = exp(r245897);
        double r245899 = r245896 * r245898;
        double r245900 = fma(r245890, r245899, r245883);
        double r245901 = r245878 ? r245885 : r245900;
        return r245901;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Target

Original20.3
Target0.1
Herbie0.2
\[\begin{array}{l} \mathbf{if}\;z \lt -8120153.6524566747248172760009765625:\\ \;\;\;\;\left(\frac{0.07512208616047560960637952121032867580652}{z} + 0.06929105992918889456166908757950295694172\right) \cdot y - \left(\frac{0.4046220386999212492717958866705885156989 \cdot y}{z \cdot z} - x\right)\\ \mathbf{elif}\;z \lt 657611897278737678336:\\ \;\;\;\;x + \left(y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)\right) \cdot \frac{1}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{0.07512208616047560960637952121032867580652}{z} + 0.06929105992918889456166908757950295694172\right) \cdot y - \left(\frac{0.4046220386999212492717958866705885156989 \cdot y}{z \cdot z} - x\right)\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if z < -0.6121835230050514 or 125942949.1297364 < z

    1. Initial program 40.8

      \[x + \frac{y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\]
    2. Simplified33.8

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{y}{\mathsf{fma}\left(z + 6.012459259764103336465268512256443500519, z, 3.350343815022303939343828460550867021084\right)}, \mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right), x\right)}\]
    3. Using strategy rm
    4. Applied add-sqr-sqrt33.9

      \[\leadsto \mathsf{fma}\left(\frac{y}{\color{blue}{\sqrt{\mathsf{fma}\left(z + 6.012459259764103336465268512256443500519, z, 3.350343815022303939343828460550867021084\right)} \cdot \sqrt{\mathsf{fma}\left(z + 6.012459259764103336465268512256443500519, z, 3.350343815022303939343828460550867021084\right)}}}, \mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right), x\right)\]
    5. Applied associate-/r*33.9

      \[\leadsto \mathsf{fma}\left(\color{blue}{\frac{\frac{y}{\sqrt{\mathsf{fma}\left(z + 6.012459259764103336465268512256443500519, z, 3.350343815022303939343828460550867021084\right)}}}{\sqrt{\mathsf{fma}\left(z + 6.012459259764103336465268512256443500519, z, 3.350343815022303939343828460550867021084\right)}}}, \mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right), x\right)\]
    6. Taylor expanded around inf 0.2

      \[\leadsto \color{blue}{x + \left(0.07512208616047560960637952121032867580652 \cdot \frac{y}{z} + 0.06929105992918889456166908757950295694172 \cdot y\right)}\]
    7. Simplified0.2

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{y}{z}, 0.07512208616047560960637952121032867580652, \mathsf{fma}\left(0.06929105992918889456166908757950295694172, y, x\right)\right)}\]

    if -0.6121835230050514 < z < 125942949.1297364

    1. Initial program 0.1

      \[x + \frac{y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\]
    2. Simplified0.1

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{y}{\mathsf{fma}\left(z + 6.012459259764103336465268512256443500519, z, 3.350343815022303939343828460550867021084\right)}, \mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right), x\right)}\]
    3. Using strategy rm
    4. Applied add-cube-cbrt0.2

      \[\leadsto \mathsf{fma}\left(\frac{y}{\mathsf{fma}\left(z + 6.012459259764103336465268512256443500519, z, 3.350343815022303939343828460550867021084\right)}, \color{blue}{\left(\sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right)}\right) \cdot \sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right)}}, x\right)\]
    5. Using strategy rm
    6. Applied add-exp-log0.2

      \[\leadsto \mathsf{fma}\left(\frac{y}{\mathsf{fma}\left(z + 6.012459259764103336465268512256443500519, z, 3.350343815022303939343828460550867021084\right)}, \left(\sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right)}\right) \cdot \color{blue}{e^{\log \left(\sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right)}\right)}}, x\right)\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -0.6121835230050514109478854152257554233074 \lor \neg \left(z \le 125942949.1297363936901092529296875\right):\\ \;\;\;\;\mathsf{fma}\left(\frac{y}{z}, 0.07512208616047560960637952121032867580652, \mathsf{fma}\left(0.06929105992918889456166908757950295694172, y, x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{y}{\mathsf{fma}\left(z + 6.012459259764103336465268512256443500519, z, 3.350343815022303939343828460550867021084\right)}, \left(\sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right)}\right) \cdot e^{\log \left(\sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right)}\right)}, x\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019303 +o rules:numerics
(FPCore (x y z)
  :name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B"
  :precision binary64

  :herbie-target
  (if (< z -8120153.6524566747) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291888946) y) (- (/ (* 0.404622038699921249 y) (* z z)) x)) (if (< z 657611897278737680000) (+ x (* (* y (+ (* (+ (* z 0.0692910599291888946) 0.49173176105059679) z) 0.279195317918524977)) (/ 1 (+ (* (+ z 6.0124592597641033) z) 3.35034381502230394)))) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291888946) y) (- (/ (* 0.404622038699921249 y) (* z z)) x))))

  (+ x (/ (* y (+ (* (+ (* z 0.0692910599291888946) 0.49173176105059679) z) 0.279195317918524977)) (+ (* (+ z 6.0124592597641033) z) 3.35034381502230394))))