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

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

\end{array}
double f(double x) {
        double r42540 = x;
        double r42541 = r42540 * r42540;
        double r42542 = 1.0;
        double r42543 = r42541 + r42542;
        double r42544 = r42540 / r42543;
        return r42544;
}

double f(double x) {
        double r42545 = x;
        double r42546 = -4182345296.2656183;
        bool r42547 = r42545 <= r42546;
        double r42548 = 50461.05920151082;
        bool r42549 = r42545 <= r42548;
        double r42550 = !r42549;
        bool r42551 = r42547 || r42550;
        double r42552 = 1.0;
        double r42553 = 1.0;
        double r42554 = 5.0;
        double r42555 = pow(r42545, r42554);
        double r42556 = r42553 / r42555;
        double r42557 = 3.0;
        double r42558 = pow(r42545, r42557);
        double r42559 = r42553 / r42558;
        double r42560 = r42556 - r42559;
        double r42561 = r42552 * r42560;
        double r42562 = r42553 / r42545;
        double r42563 = r42561 + r42562;
        double r42564 = r42545 * r42545;
        double r42565 = r42564 + r42552;
        double r42566 = r42553 / r42565;
        double r42567 = r42545 * r42566;
        double r42568 = r42551 ? r42563 : r42567;
        return r42568;
}

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 < -4182345296.2656183 or 50461.05920151082 < x

    1. Initial program 30.8

      \[\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}{1 \cdot \left(\frac{1}{{x}^{5}} - \frac{1}{{x}^{3}}\right) + \frac{1}{x}}\]

    if -4182345296.2656183 < x < 50461.05920151082

    1. Initial program 0.0

      \[\frac{x}{x \cdot x + 1}\]
    2. Using strategy rm
    3. Applied div-inv0.0

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

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

Reproduce

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

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

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