Average Error: 15.1 → 0.0
Time: 14.0s
Precision: 64
\[\frac{x}{x \cdot x + 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -853997951174.7607421875 \lor \neg \left(x \le 454.5428262739261526803602464497089385986\right):\\ \;\;\;\;\frac{1}{x} + \left(\frac{1}{{x}^{5}} - \frac{1}{{x}^{3}}\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{x \cdot x + 1}\\ \end{array}\]
\frac{x}{x \cdot x + 1}
\begin{array}{l}
\mathbf{if}\;x \le -853997951174.7607421875 \lor \neg \left(x \le 454.5428262739261526803602464497089385986\right):\\
\;\;\;\;\frac{1}{x} + \left(\frac{1}{{x}^{5}} - \frac{1}{{x}^{3}}\right)\\

\mathbf{else}:\\
\;\;\;\;\frac{x}{x \cdot x + 1}\\

\end{array}
double f(double x) {
        double r55420 = x;
        double r55421 = r55420 * r55420;
        double r55422 = 1.0;
        double r55423 = r55421 + r55422;
        double r55424 = r55420 / r55423;
        return r55424;
}

double f(double x) {
        double r55425 = x;
        double r55426 = -853997951174.7607;
        bool r55427 = r55425 <= r55426;
        double r55428 = 454.54282627392615;
        bool r55429 = r55425 <= r55428;
        double r55430 = !r55429;
        bool r55431 = r55427 || r55430;
        double r55432 = 1.0;
        double r55433 = r55432 / r55425;
        double r55434 = 1.0;
        double r55435 = 5.0;
        double r55436 = pow(r55425, r55435);
        double r55437 = r55434 / r55436;
        double r55438 = 3.0;
        double r55439 = pow(r55425, r55438);
        double r55440 = r55434 / r55439;
        double r55441 = r55437 - r55440;
        double r55442 = r55433 + r55441;
        double r55443 = r55425 * r55425;
        double r55444 = r55443 + r55434;
        double r55445 = r55425 / r55444;
        double r55446 = r55431 ? r55442 : r55445;
        return r55446;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original15.1
Target0.1
Herbie0.0
\[\frac{1}{x + \frac{1}{x}}\]

Derivation

  1. Split input into 2 regimes
  2. if x < -853997951174.7607 or 454.54282627392615 < x

    1. Initial program 30.5

      \[\frac{x}{x \cdot x + 1}\]
    2. Taylor expanded around inf 0.0

      \[\leadsto \color{blue}{\left(1 \cdot \frac{1}{{x}^{5}} + \frac{1}{x}\right) - 1 \cdot \frac{1}{{x}^{3}}}\]
    3. Simplified0.0

      \[\leadsto \color{blue}{\frac{1}{x} + \left(\frac{1}{{x}^{5}} - \frac{1}{{x}^{3}}\right)}\]

    if -853997951174.7607 < x < 454.54282627392615

    1. Initial program 0.0

      \[\frac{x}{x \cdot x + 1}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -853997951174.7607421875 \lor \neg \left(x \le 454.5428262739261526803602464497089385986\right):\\ \;\;\;\;\frac{1}{x} + \left(\frac{1}{{x}^{5}} - \frac{1}{{x}^{3}}\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{x \cdot x + 1}\\ \end{array}\]

Reproduce

herbie shell --seed 2019323 
(FPCore (x)
  :name "x / (x^2 + 1)"
  :precision binary64

  :herbie-target
  (/ 1 (+ x (/ 1 x)))

  (/ x (+ (* x x) 1)))