Average Error: 20.3 → 0.5
Time: 15.2s
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 1.477218818365684420300619684695273871322 \cdot 10^{-11}\right):\\ \;\;\;\;x + \left(0.06929105992918889456166908757950295694172 \cdot y + \frac{y}{z} \cdot \left(0.07512208616047560960637952121032867580652 - \frac{0.4046220386999212492717958866705885156989}{z}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;x + y \cdot \frac{\frac{\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736}{\sqrt{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}}}{\sqrt{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}}\\ \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 1.477218818365684420300619684695273871322 \cdot 10^{-11}\right):\\
\;\;\;\;x + \left(0.06929105992918889456166908757950295694172 \cdot y + \frac{y}{z} \cdot \left(0.07512208616047560960637952121032867580652 - \frac{0.4046220386999212492717958866705885156989}{z}\right)\right)\\

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

\end{array}
double f(double x, double y, double z) {
        double r268711 = x;
        double r268712 = y;
        double r268713 = z;
        double r268714 = 0.0692910599291889;
        double r268715 = r268713 * r268714;
        double r268716 = 0.4917317610505968;
        double r268717 = r268715 + r268716;
        double r268718 = r268717 * r268713;
        double r268719 = 0.279195317918525;
        double r268720 = r268718 + r268719;
        double r268721 = r268712 * r268720;
        double r268722 = 6.012459259764103;
        double r268723 = r268713 + r268722;
        double r268724 = r268723 * r268713;
        double r268725 = 3.350343815022304;
        double r268726 = r268724 + r268725;
        double r268727 = r268721 / r268726;
        double r268728 = r268711 + r268727;
        return r268728;
}

double f(double x, double y, double z) {
        double r268729 = z;
        double r268730 = -0.6121835230050514;
        bool r268731 = r268729 <= r268730;
        double r268732 = 1.4772188183656844e-11;
        bool r268733 = r268729 <= r268732;
        double r268734 = !r268733;
        bool r268735 = r268731 || r268734;
        double r268736 = x;
        double r268737 = 0.0692910599291889;
        double r268738 = y;
        double r268739 = r268737 * r268738;
        double r268740 = r268738 / r268729;
        double r268741 = 0.07512208616047561;
        double r268742 = 0.40462203869992125;
        double r268743 = r268742 / r268729;
        double r268744 = r268741 - r268743;
        double r268745 = r268740 * r268744;
        double r268746 = r268739 + r268745;
        double r268747 = r268736 + r268746;
        double r268748 = r268729 * r268737;
        double r268749 = 0.4917317610505968;
        double r268750 = r268748 + r268749;
        double r268751 = r268750 * r268729;
        double r268752 = 0.279195317918525;
        double r268753 = r268751 + r268752;
        double r268754 = 6.012459259764103;
        double r268755 = r268729 + r268754;
        double r268756 = r268755 * r268729;
        double r268757 = 3.350343815022304;
        double r268758 = r268756 + r268757;
        double r268759 = sqrt(r268758);
        double r268760 = r268753 / r268759;
        double r268761 = r268760 / r268759;
        double r268762 = r268738 * r268761;
        double r268763 = r268736 + r268762;
        double r268764 = r268735 ? r268747 : r268763;
        return r268764;
}

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

Original20.3
Target0.1
Herbie0.5
\[\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 1.4772188183656844e-11 < z

    1. Initial program 39.6

      \[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. Taylor expanded around inf 0.8

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

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

    if -0.6121835230050514 < z < 1.4772188183656844e-11

    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. Using strategy rm
    3. Applied *-un-lft-identity0.1

      \[\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-frac0.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. Simplified0.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. Using strategy rm
    7. Applied add-sqr-sqrt0.4

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -0.6121835230050514109478854152257554233074 \lor \neg \left(z \le 1.477218818365684420300619684695273871322 \cdot 10^{-11}\right):\\ \;\;\;\;x + \left(0.06929105992918889456166908757950295694172 \cdot y + \frac{y}{z} \cdot \left(0.07512208616047560960637952121032867580652 - \frac{0.4046220386999212492717958866705885156989}{z}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;x + y \cdot \frac{\frac{\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736}{\sqrt{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}}}{\sqrt{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019303 
(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))))