Average Error: 16.4 → 5.8
Time: 5.1s
Precision: binary64
\[\]
\[\]
\[\]
double code(double alpha, double beta) {
	return (((beta - alpha) / ((alpha + beta) + 2.0)) + 1.0) / 2.0;
}
double code(double alpha, double beta) {
	double tmp;
	if (alpha <= 218152260.39439523) {
		tmp = (((beta * ((1.0 * 1.0) + ((alpha / ((alpha + beta) + 2.0)) * (1.0 + (alpha / ((alpha + beta) + 2.0)))))) - (((alpha + beta) + 2.0) * (pow((alpha / ((alpha + beta) + 2.0)), 3.0) - pow(1.0, 3.0)))) / (((alpha + beta) + 2.0) * ((1.0 * 1.0) + ((alpha / ((alpha + beta) + 2.0)) * (1.0 + (alpha / ((alpha + beta) + 2.0))))))) / 2.0;
	} else {
		tmp = ((beta / ((alpha + beta) + 2.0)) - ((4.0 / (alpha * alpha)) - ((2.0 / alpha) + (8.0 / pow(alpha, 3.0))))) / 2.0;
	}
	return tmp;
}

Error

Bits error versus alpha

Bits error versus beta

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 2 regimes
  2. if alpha < 218152260.39439523

    1. Initial program 0.1

      \[\]
    2. Using strategy rm
    3. Applied div-sub0.1

      \[\leadsto \]
    4. Applied associate-+l-0.1

      \[\leadsto \]
    5. Simplified0.1

      \[\leadsto \]
    6. Using strategy rm
    7. Applied flip3--0.1

      \[\leadsto \]
    8. Applied frac-sub0.1

      \[\leadsto \]
    9. Simplified0.1

      \[\leadsto \]
    10. Simplified0.1

      \[\leadsto \]

    if 218152260.39439523 < alpha

    1. Initial program 50.0

      \[\]
    2. Using strategy rm
    3. Applied div-sub50.0

      \[\leadsto \]
    4. Applied associate-+l-48.5

      \[\leadsto \]
    5. Simplified48.5

      \[\leadsto \]
    6. Taylor expanded around inf 17.6

      \[\leadsto \]
    7. Simplified17.6

      \[\leadsto \]
  3. Recombined 2 regimes into one program.
  4. Final simplification5.8

    \[\leadsto \]

Reproduce

herbie shell --seed 2020338 
(FPCore (alpha beta)
  :name "Octave 3.8, jcobi/1"
  :precision binary64
  :pre (and (> alpha -1.0) (> beta -1.0))
  (/ (+ (/ (- beta alpha) (+ (+ alpha beta) 2.0)) 1.0) 2.0))