Average Error: 19.9 → 0.2
Time: 22.1s
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 -2425787276974239638204973056:\\ \;\;\;\;x + y \cdot \left(\frac{0.07512208616047560960637952121032867580652}{z} + \left(0.06929105992918889456166908757950295694172 - \frac{0.4046220386999212492717958866705885156989}{z \cdot z}\right)\right)\\ \mathbf{elif}\;z \le 424553.871098166913725435733795166015625:\\ \;\;\;\;x + \frac{y \cdot \left(z \cdot \left(0.06929105992918889456166908757950295694172 \cdot z + 0.4917317610505967939715787906607147306204\right) + 0.2791953179185249767080279070796677842736\right)}{3.350343815022303939343828460550867021084 + z \cdot \left(6.012459259764103336465268512256443500519 + z\right)}\\ \mathbf{else}:\\ \;\;\;\;x + y \cdot \left(\frac{0.07512208616047560960637952121032867580652}{z} + \left(0.06929105992918889456166908757950295694172 - \frac{0.4046220386999212492717958866705885156989}{z \cdot z}\right)\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 -2425787276974239638204973056:\\
\;\;\;\;x + y \cdot \left(\frac{0.07512208616047560960637952121032867580652}{z} + \left(0.06929105992918889456166908757950295694172 - \frac{0.4046220386999212492717958866705885156989}{z \cdot z}\right)\right)\\

\mathbf{elif}\;z \le 424553.871098166913725435733795166015625:\\
\;\;\;\;x + \frac{y \cdot \left(z \cdot \left(0.06929105992918889456166908757950295694172 \cdot z + 0.4917317610505967939715787906607147306204\right) + 0.2791953179185249767080279070796677842736\right)}{3.350343815022303939343828460550867021084 + z \cdot \left(6.012459259764103336465268512256443500519 + z\right)}\\

\mathbf{else}:\\
\;\;\;\;x + y \cdot \left(\frac{0.07512208616047560960637952121032867580652}{z} + \left(0.06929105992918889456166908757950295694172 - \frac{0.4046220386999212492717958866705885156989}{z \cdot z}\right)\right)\\

\end{array}
double f(double x, double y, double z) {
        double r20165033 = x;
        double r20165034 = y;
        double r20165035 = z;
        double r20165036 = 0.0692910599291889;
        double r20165037 = r20165035 * r20165036;
        double r20165038 = 0.4917317610505968;
        double r20165039 = r20165037 + r20165038;
        double r20165040 = r20165039 * r20165035;
        double r20165041 = 0.279195317918525;
        double r20165042 = r20165040 + r20165041;
        double r20165043 = r20165034 * r20165042;
        double r20165044 = 6.012459259764103;
        double r20165045 = r20165035 + r20165044;
        double r20165046 = r20165045 * r20165035;
        double r20165047 = 3.350343815022304;
        double r20165048 = r20165046 + r20165047;
        double r20165049 = r20165043 / r20165048;
        double r20165050 = r20165033 + r20165049;
        return r20165050;
}

double f(double x, double y, double z) {
        double r20165051 = z;
        double r20165052 = -2.4257872769742396e+27;
        bool r20165053 = r20165051 <= r20165052;
        double r20165054 = x;
        double r20165055 = y;
        double r20165056 = 0.07512208616047561;
        double r20165057 = r20165056 / r20165051;
        double r20165058 = 0.0692910599291889;
        double r20165059 = 0.40462203869992125;
        double r20165060 = r20165051 * r20165051;
        double r20165061 = r20165059 / r20165060;
        double r20165062 = r20165058 - r20165061;
        double r20165063 = r20165057 + r20165062;
        double r20165064 = r20165055 * r20165063;
        double r20165065 = r20165054 + r20165064;
        double r20165066 = 424553.8710981669;
        bool r20165067 = r20165051 <= r20165066;
        double r20165068 = r20165058 * r20165051;
        double r20165069 = 0.4917317610505968;
        double r20165070 = r20165068 + r20165069;
        double r20165071 = r20165051 * r20165070;
        double r20165072 = 0.279195317918525;
        double r20165073 = r20165071 + r20165072;
        double r20165074 = r20165055 * r20165073;
        double r20165075 = 3.350343815022304;
        double r20165076 = 6.012459259764103;
        double r20165077 = r20165076 + r20165051;
        double r20165078 = r20165051 * r20165077;
        double r20165079 = r20165075 + r20165078;
        double r20165080 = r20165074 / r20165079;
        double r20165081 = r20165054 + r20165080;
        double r20165082 = r20165067 ? r20165081 : r20165065;
        double r20165083 = r20165053 ? r20165065 : r20165082;
        return r20165083;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original19.9
Target0.2
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 < -2.4257872769742396e+27 or 424553.8710981669 < z

    1. Initial program 41.7

      \[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. Using strategy rm
    3. Applied *-un-lft-identity41.7

      \[\leadsto x + \frac{y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)}{\color{blue}{1 \cdot \left(\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084\right)}}\]
    4. Applied times-frac34.1

      \[\leadsto x + \color{blue}{\frac{y}{1} \cdot \frac{\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}}\]
    5. Simplified34.1

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

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

      \[\leadsto x + y \cdot \color{blue}{\left(\frac{0.07512208616047560960637952121032867580652}{z} + \left(0.06929105992918889456166908757950295694172 - \frac{0.4046220386999212492717958866705885156989}{z \cdot z}\right)\right)}\]

    if -2.4257872769742396e+27 < z < 424553.8710981669

    1. Initial program 0.3

      \[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}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -2425787276974239638204973056:\\ \;\;\;\;x + y \cdot \left(\frac{0.07512208616047560960637952121032867580652}{z} + \left(0.06929105992918889456166908757950295694172 - \frac{0.4046220386999212492717958866705885156989}{z \cdot z}\right)\right)\\ \mathbf{elif}\;z \le 424553.871098166913725435733795166015625:\\ \;\;\;\;x + \frac{y \cdot \left(z \cdot \left(0.06929105992918889456166908757950295694172 \cdot z + 0.4917317610505967939715787906607147306204\right) + 0.2791953179185249767080279070796677842736\right)}{3.350343815022303939343828460550867021084 + z \cdot \left(6.012459259764103336465268512256443500519 + z\right)}\\ \mathbf{else}:\\ \;\;\;\;x + y \cdot \left(\frac{0.07512208616047560960637952121032867580652}{z} + \left(0.06929105992918889456166908757950295694172 - \frac{0.4046220386999212492717958866705885156989}{z \cdot z}\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019169 
(FPCore (x y z)
  :name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B"

  :herbie-target
  (if (< z -8120153.652456675) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x)) (if (< z 6.576118972787377e+20) (+ x (* (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (/ 1.0 (+ (* (+ z 6.012459259764103) z) 3.350343815022304)))) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x))))

  (+ x (/ (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (+ (* (+ z 6.012459259764103) z) 3.350343815022304))))