Average Error: 29.7 → 1.3
Time: 17.1s
Precision: 64
\[x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}\]
\[\begin{array}{l} \mathbf{if}\;z \le -1.9368894499979585 \cdot 10^{37} \lor \neg \left(z \le 5056003.575426906\right):\\ \;\;\;\;x + y \cdot \left(\left(\frac{t}{{z}^{2}} + 3.13060547622999996\right) - \frac{36.527041698806414}{z}\right)\\ \mathbf{else}:\\ \;\;\;\;x + \left(y \cdot \frac{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z\right) \cdot \left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z\right) - 0.60777138777100004 \cdot 0.60777138777100004}\right) \cdot \left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z - 0.60777138777100004\right)\\ \end{array}\]
x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}
\begin{array}{l}
\mathbf{if}\;z \le -1.9368894499979585 \cdot 10^{37} \lor \neg \left(z \le 5056003.575426906\right):\\
\;\;\;\;x + y \cdot \left(\left(\frac{t}{{z}^{2}} + 3.13060547622999996\right) - \frac{36.527041698806414}{z}\right)\\

\mathbf{else}:\\
\;\;\;\;x + \left(y \cdot \frac{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z\right) \cdot \left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z\right) - 0.60777138777100004 \cdot 0.60777138777100004}\right) \cdot \left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z - 0.60777138777100004\right)\\

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r412614 = x;
        double r412615 = y;
        double r412616 = z;
        double r412617 = 3.13060547623;
        double r412618 = r412616 * r412617;
        double r412619 = 11.1667541262;
        double r412620 = r412618 + r412619;
        double r412621 = r412620 * r412616;
        double r412622 = t;
        double r412623 = r412621 + r412622;
        double r412624 = r412623 * r412616;
        double r412625 = a;
        double r412626 = r412624 + r412625;
        double r412627 = r412626 * r412616;
        double r412628 = b;
        double r412629 = r412627 + r412628;
        double r412630 = r412615 * r412629;
        double r412631 = 15.234687407;
        double r412632 = r412616 + r412631;
        double r412633 = r412632 * r412616;
        double r412634 = 31.4690115749;
        double r412635 = r412633 + r412634;
        double r412636 = r412635 * r412616;
        double r412637 = 11.9400905721;
        double r412638 = r412636 + r412637;
        double r412639 = r412638 * r412616;
        double r412640 = 0.607771387771;
        double r412641 = r412639 + r412640;
        double r412642 = r412630 / r412641;
        double r412643 = r412614 + r412642;
        return r412643;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r412644 = z;
        double r412645 = -1.9368894499979585e+37;
        bool r412646 = r412644 <= r412645;
        double r412647 = 5056003.575426906;
        bool r412648 = r412644 <= r412647;
        double r412649 = !r412648;
        bool r412650 = r412646 || r412649;
        double r412651 = x;
        double r412652 = y;
        double r412653 = t;
        double r412654 = 2.0;
        double r412655 = pow(r412644, r412654);
        double r412656 = r412653 / r412655;
        double r412657 = 3.13060547623;
        double r412658 = r412656 + r412657;
        double r412659 = 36.527041698806414;
        double r412660 = r412659 / r412644;
        double r412661 = r412658 - r412660;
        double r412662 = r412652 * r412661;
        double r412663 = r412651 + r412662;
        double r412664 = r412644 * r412657;
        double r412665 = 11.1667541262;
        double r412666 = r412664 + r412665;
        double r412667 = r412666 * r412644;
        double r412668 = r412667 + r412653;
        double r412669 = r412668 * r412644;
        double r412670 = a;
        double r412671 = r412669 + r412670;
        double r412672 = r412671 * r412644;
        double r412673 = b;
        double r412674 = r412672 + r412673;
        double r412675 = 15.234687407;
        double r412676 = r412644 + r412675;
        double r412677 = r412676 * r412644;
        double r412678 = 31.4690115749;
        double r412679 = r412677 + r412678;
        double r412680 = r412679 * r412644;
        double r412681 = 11.9400905721;
        double r412682 = r412680 + r412681;
        double r412683 = r412682 * r412644;
        double r412684 = r412683 * r412683;
        double r412685 = 0.607771387771;
        double r412686 = r412685 * r412685;
        double r412687 = r412684 - r412686;
        double r412688 = r412674 / r412687;
        double r412689 = r412652 * r412688;
        double r412690 = r412683 - r412685;
        double r412691 = r412689 * r412690;
        double r412692 = r412651 + r412691;
        double r412693 = r412650 ? r412663 : r412692;
        return r412693;
}

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

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original29.7
Target1.1
Herbie1.3
\[\begin{array}{l} \mathbf{if}\;z \lt -6.4993449962526318 \cdot 10^{53}:\\ \;\;\;\;x + \left(\left(3.13060547622999996 - \frac{36.527041698806414}{z}\right) + \frac{t}{z \cdot z}\right) \cdot \frac{y}{1}\\ \mathbf{elif}\;z \lt 7.0669654369142868 \cdot 10^{59}:\\ \;\;\;\;x + \frac{y}{\frac{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}}\\ \mathbf{else}:\\ \;\;\;\;x + \left(\left(3.13060547622999996 - \frac{36.527041698806414}{z}\right) + \frac{t}{z \cdot z}\right) \cdot \frac{y}{1}\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if z < -1.9368894499979585e+37 or 5056003.575426906 < z

    1. Initial program 57.9

      \[x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity57.9

      \[\leadsto x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\color{blue}{1 \cdot \left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004\right)}}\]
    4. Applied times-frac55.1

      \[\leadsto x + \color{blue}{\frac{y}{1} \cdot \frac{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}}\]
    5. Simplified55.1

      \[\leadsto x + \color{blue}{y} \cdot \frac{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}\]
    6. Taylor expanded around inf 2.1

      \[\leadsto x + y \cdot \color{blue}{\left(\left(\frac{t}{{z}^{2}} + 3.13060547622999996\right) - 36.527041698806414 \cdot \frac{1}{z}\right)}\]
    7. Simplified2.1

      \[\leadsto x + y \cdot \color{blue}{\left(\left(\frac{t}{{z}^{2}} + 3.13060547622999996\right) - \frac{36.527041698806414}{z}\right)}\]

    if -1.9368894499979585e+37 < z < 5056003.575426906

    1. Initial program 1.0

      \[x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity1.0

      \[\leadsto x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\color{blue}{1 \cdot \left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004\right)}}\]
    4. Applied times-frac0.5

      \[\leadsto x + \color{blue}{\frac{y}{1} \cdot \frac{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}}\]
    5. Simplified0.5

      \[\leadsto x + \color{blue}{y} \cdot \frac{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}\]
    6. Using strategy rm
    7. Applied flip-+0.5

      \[\leadsto x + y \cdot \frac{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\color{blue}{\frac{\left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z\right) \cdot \left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z\right) - 0.60777138777100004 \cdot 0.60777138777100004}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z - 0.60777138777100004}}}\]
    8. Applied associate-/r/0.5

      \[\leadsto x + y \cdot \color{blue}{\left(\frac{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z\right) \cdot \left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z\right) - 0.60777138777100004 \cdot 0.60777138777100004} \cdot \left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z - 0.60777138777100004\right)\right)}\]
    9. Applied associate-*r*0.6

      \[\leadsto x + \color{blue}{\left(y \cdot \frac{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z\right) \cdot \left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z\right) - 0.60777138777100004 \cdot 0.60777138777100004}\right) \cdot \left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z - 0.60777138777100004\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification1.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -1.9368894499979585 \cdot 10^{37} \lor \neg \left(z \le 5056003.575426906\right):\\ \;\;\;\;x + y \cdot \left(\left(\frac{t}{{z}^{2}} + 3.13060547622999996\right) - \frac{36.527041698806414}{z}\right)\\ \mathbf{else}:\\ \;\;\;\;x + \left(y \cdot \frac{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z\right) \cdot \left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z\right) - 0.60777138777100004 \cdot 0.60777138777100004}\right) \cdot \left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z - 0.60777138777100004\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020043 
(FPCore (x y z t a b)
  :name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, D"
  :precision binary64

  :herbie-target
  (if (< z -6.499344996252632e+53) (+ x (* (+ (- 3.13060547623 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1))) (if (< z 7.066965436914287e+59) (+ x (/ y (/ (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771) (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)))) (+ x (* (+ (- 3.13060547623 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1)))))

  (+ x (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771))))