Average Error: 16.2 → 0.0
Time: 8.8s
Precision: binary64
Cost: 7104
\[\alpha > -1 \land \beta > -1\]
\[\frac{\frac{\beta - \alpha}{\left(\alpha + \beta\right) + 2} + 1}{2} \]
\[\frac{\frac{\mathsf{fma}\left(\beta, -2, -2\right)}{\left(-2 - \beta\right) - \alpha}}{2} \]
(FPCore (alpha beta)
 :precision binary64
 (/ (+ (/ (- beta alpha) (+ (+ alpha beta) 2.0)) 1.0) 2.0))
(FPCore (alpha beta)
 :precision binary64
 (/ (/ (fma beta -2.0 -2.0) (- (- -2.0 beta) alpha)) 2.0))
double code(double alpha, double beta) {
	return (((beta - alpha) / ((alpha + beta) + 2.0)) + 1.0) / 2.0;
}
double code(double alpha, double beta) {
	return (fma(beta, -2.0, -2.0) / ((-2.0 - beta) - alpha)) / 2.0;
}
function code(alpha, beta)
	return Float64(Float64(Float64(Float64(beta - alpha) / Float64(Float64(alpha + beta) + 2.0)) + 1.0) / 2.0)
end
function code(alpha, beta)
	return Float64(Float64(fma(beta, -2.0, -2.0) / Float64(Float64(-2.0 - beta) - alpha)) / 2.0)
end
code[alpha_, beta_] := N[(N[(N[(N[(beta - alpha), $MachinePrecision] / N[(N[(alpha + beta), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision] / 2.0), $MachinePrecision]
code[alpha_, beta_] := N[(N[(N[(beta * -2.0 + -2.0), $MachinePrecision] / N[(N[(-2.0 - beta), $MachinePrecision] - alpha), $MachinePrecision]), $MachinePrecision] / 2.0), $MachinePrecision]
\frac{\frac{\beta - \alpha}{\left(\alpha + \beta\right) + 2} + 1}{2}
\frac{\frac{\mathsf{fma}\left(\beta, -2, -2\right)}{\left(-2 - \beta\right) - \alpha}}{2}

Error

Derivation

  1. Initial program 16.2

    \[\frac{\frac{\beta - \alpha}{\left(\alpha + \beta\right) + 2} + 1}{2} \]
  2. Taylor expanded in alpha around -inf 47.2

    \[\leadsto \frac{\color{blue}{-1 \cdot \frac{-1 \cdot \beta - \left(\beta + 2\right)}{\alpha} + -1 \cdot \frac{{\left(\beta + 2\right)}^{2} + \beta \cdot \left(\beta + 2\right)}{{\alpha}^{2}}}}{2} \]
  3. Simplified46.3

    \[\leadsto \frac{\color{blue}{\frac{\beta \cdot -2 + -2}{\alpha} \cdot \left(-1 - \frac{-2 - \beta}{\alpha}\right)}}{2} \]
    Proof
    (*.f64 (/.f64 (+.f64 (*.f64 beta -2) -2) alpha) (-.f64 -1 (/.f64 (-.f64 -2 beta) alpha))): 0 points increase in error, 0 points decrease in error
    (*.f64 (/.f64 (+.f64 (*.f64 beta (Rewrite<= metadata-eval (+.f64 -1 -1))) -2) alpha) (-.f64 -1 (/.f64 (-.f64 -2 beta) alpha))): 0 points increase in error, 0 points decrease in error
    (*.f64 (/.f64 (+.f64 (Rewrite<= distribute-rgt-out_binary64 (+.f64 (*.f64 -1 beta) (*.f64 -1 beta))) -2) alpha) (-.f64 -1 (/.f64 (-.f64 -2 beta) alpha))): 0 points increase in error, 0 points decrease in error
    (*.f64 (/.f64 (+.f64 (+.f64 (*.f64 -1 beta) (Rewrite=> mul-1-neg_binary64 (neg.f64 beta))) -2) alpha) (-.f64 -1 (/.f64 (-.f64 -2 beta) alpha))): 0 points increase in error, 0 points decrease in error
    (*.f64 (/.f64 (+.f64 (Rewrite<= sub-neg_binary64 (-.f64 (*.f64 -1 beta) beta)) -2) alpha) (-.f64 -1 (/.f64 (-.f64 -2 beta) alpha))): 0 points increase in error, 0 points decrease in error
    (*.f64 (/.f64 (+.f64 (-.f64 (*.f64 -1 beta) beta) (Rewrite<= metadata-eval (neg.f64 2))) alpha) (-.f64 -1 (/.f64 (-.f64 -2 beta) alpha))): 0 points increase in error, 0 points decrease in error
    (*.f64 (/.f64 (Rewrite<= sub-neg_binary64 (-.f64 (-.f64 (*.f64 -1 beta) beta) 2)) alpha) (-.f64 -1 (/.f64 (-.f64 -2 beta) alpha))): 0 points increase in error, 0 points decrease in error
    (*.f64 (/.f64 (Rewrite<= associate--r+_binary64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2))) alpha) (-.f64 -1 (/.f64 (-.f64 -2 beta) alpha))): 1 points increase in error, 0 points decrease in error
    (*.f64 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha) (-.f64 -1 (/.f64 (-.f64 (Rewrite<= metadata-eval (*.f64 2 -1)) beta) alpha))): 0 points increase in error, 0 points decrease in error
    (*.f64 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha) (-.f64 -1 (/.f64 (Rewrite<= unsub-neg_binary64 (+.f64 (*.f64 2 -1) (neg.f64 beta))) alpha))): 0 points increase in error, 0 points decrease in error
    (*.f64 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha) (-.f64 -1 (/.f64 (+.f64 (*.f64 2 -1) (Rewrite<= mul-1-neg_binary64 (*.f64 -1 beta))) alpha))): 0 points increase in error, 0 points decrease in error
    (*.f64 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha) (-.f64 -1 (/.f64 (+.f64 (*.f64 2 -1) (Rewrite=> *-commutative_binary64 (*.f64 beta -1))) alpha))): 0 points increase in error, 0 points decrease in error
    (*.f64 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha) (-.f64 -1 (/.f64 (Rewrite<= distribute-rgt-in_binary64 (*.f64 -1 (+.f64 2 beta))) alpha))): 0 points increase in error, 0 points decrease in error
    (*.f64 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha) (-.f64 -1 (/.f64 (*.f64 -1 (Rewrite<= +-commutative_binary64 (+.f64 beta 2))) alpha))): 0 points increase in error, 0 points decrease in error
    (*.f64 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha) (-.f64 -1 (Rewrite<= associate-*r/_binary64 (*.f64 -1 (/.f64 (+.f64 beta 2) alpha))))): 0 points increase in error, 0 points decrease in error
    (*.f64 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha) (Rewrite<= unsub-neg_binary64 (+.f64 -1 (neg.f64 (*.f64 -1 (/.f64 (+.f64 beta 2) alpha)))))): 0 points increase in error, 0 points decrease in error
    (*.f64 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha) (+.f64 -1 (neg.f64 (Rewrite=> mul-1-neg_binary64 (neg.f64 (/.f64 (+.f64 beta 2) alpha)))))): 0 points increase in error, 0 points decrease in error
    (*.f64 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha) (+.f64 -1 (Rewrite=> remove-double-neg_binary64 (/.f64 (+.f64 beta 2) alpha)))): 0 points increase in error, 0 points decrease in error
    (Rewrite<= distribute-rgt-out_binary64 (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (*.f64 (/.f64 (+.f64 beta 2) alpha) (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)))): 1 points increase in error, 2 points decrease in error
    (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (Rewrite<= times-frac_binary64 (/.f64 (*.f64 (+.f64 beta 2) (-.f64 (*.f64 -1 beta) (+.f64 beta 2))) (*.f64 alpha alpha)))): 27 points increase in error, 17 points decrease in error
    (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (/.f64 (*.f64 (+.f64 beta 2) (-.f64 (*.f64 -1 beta) (+.f64 beta 2))) (Rewrite<= unpow2_binary64 (pow.f64 alpha 2)))): 0 points increase in error, 0 points decrease in error
    (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (Rewrite<= associate-*l/_binary64 (*.f64 (/.f64 (+.f64 beta 2) (pow.f64 alpha 2)) (-.f64 (*.f64 -1 beta) (+.f64 beta 2))))): 2 points increase in error, 13 points decrease in error
    (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (*.f64 (/.f64 (+.f64 beta 2) (pow.f64 alpha 2)) (-.f64 (*.f64 -1 beta) (Rewrite<= remove-double-neg_binary64 (neg.f64 (neg.f64 (+.f64 beta 2))))))): 0 points increase in error, 0 points decrease in error
    (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (*.f64 (/.f64 (+.f64 beta 2) (pow.f64 alpha 2)) (-.f64 (*.f64 -1 beta) (neg.f64 (Rewrite<= mul-1-neg_binary64 (*.f64 -1 (+.f64 beta 2))))))): 0 points increase in error, 0 points decrease in error
    (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (*.f64 (/.f64 (+.f64 beta 2) (pow.f64 alpha 2)) (-.f64 (*.f64 -1 beta) (Rewrite=> neg-mul-1_binary64 (*.f64 -1 (*.f64 -1 (+.f64 beta 2))))))): 0 points increase in error, 0 points decrease in error
    (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (*.f64 (/.f64 (+.f64 beta 2) (pow.f64 alpha 2)) (Rewrite=> distribute-lft-out--_binary64 (*.f64 -1 (-.f64 beta (*.f64 -1 (+.f64 beta 2))))))): 0 points increase in error, 0 points decrease in error
    (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (*.f64 (/.f64 (+.f64 beta 2) (pow.f64 alpha 2)) (Rewrite<= neg-mul-1_binary64 (neg.f64 (-.f64 beta (*.f64 -1 (+.f64 beta 2))))))): 0 points increase in error, 0 points decrease in error
    (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (Rewrite=> distribute-rgt-neg-out_binary64 (neg.f64 (*.f64 (/.f64 (+.f64 beta 2) (pow.f64 alpha 2)) (-.f64 beta (*.f64 -1 (+.f64 beta 2))))))): 0 points increase in error, 0 points decrease in error
    (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (neg.f64 (Rewrite<= associate-/r/_binary64 (/.f64 (+.f64 beta 2) (/.f64 (pow.f64 alpha 2) (-.f64 beta (*.f64 -1 (+.f64 beta 2)))))))): 3 points increase in error, 2 points decrease in error
    (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (neg.f64 (Rewrite<= associate-/l*_binary64 (/.f64 (*.f64 (+.f64 beta 2) (-.f64 beta (*.f64 -1 (+.f64 beta 2)))) (pow.f64 alpha 2))))): 14 points increase in error, 4 points decrease in error
    (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (neg.f64 (/.f64 (*.f64 (+.f64 beta 2) (Rewrite=> cancel-sign-sub-inv_binary64 (+.f64 beta (*.f64 (neg.f64 -1) (+.f64 beta 2))))) (pow.f64 alpha 2)))): 0 points increase in error, 0 points decrease in error
    (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (neg.f64 (/.f64 (*.f64 (+.f64 beta 2) (+.f64 beta (*.f64 (Rewrite=> metadata-eval 1) (+.f64 beta 2)))) (pow.f64 alpha 2)))): 0 points increase in error, 0 points decrease in error
    (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (neg.f64 (/.f64 (*.f64 (+.f64 beta 2) (+.f64 beta (Rewrite=> *-lft-identity_binary64 (+.f64 beta 2)))) (pow.f64 alpha 2)))): 0 points increase in error, 0 points decrease in error
    (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (neg.f64 (/.f64 (Rewrite<= distribute-rgt-out_binary64 (+.f64 (*.f64 beta (+.f64 beta 2)) (*.f64 (+.f64 beta 2) (+.f64 beta 2)))) (pow.f64 alpha 2)))): 0 points increase in error, 0 points decrease in error
    (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (neg.f64 (/.f64 (+.f64 (*.f64 beta (+.f64 beta 2)) (Rewrite<= unpow2_binary64 (pow.f64 (+.f64 beta 2) 2))) (pow.f64 alpha 2)))): 0 points increase in error, 0 points decrease in error
    (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (neg.f64 (/.f64 (Rewrite<= +-commutative_binary64 (+.f64 (pow.f64 (+.f64 beta 2) 2) (*.f64 beta (+.f64 beta 2)))) (pow.f64 alpha 2)))): 0 points increase in error, 0 points decrease in error
    (+.f64 (*.f64 -1 (/.f64 (-.f64 (*.f64 -1 beta) (+.f64 beta 2)) alpha)) (Rewrite<= mul-1-neg_binary64 (*.f64 -1 (/.f64 (+.f64 (pow.f64 (+.f64 beta 2) 2) (*.f64 beta (+.f64 beta 2))) (pow.f64 alpha 2))))): 0 points increase in error, 0 points decrease in error
  4. Applied egg-rr46.3

    \[\leadsto \frac{\color{blue}{\frac{\mathsf{fma}\left(\beta, -2, -2\right)}{\frac{\alpha}{-1 - \frac{-2 - \beta}{\alpha}}}}}{2} \]
  5. Taylor expanded in alpha around inf 0.0

    \[\leadsto \frac{\frac{\mathsf{fma}\left(\beta, -2, -2\right)}{\color{blue}{-1 \cdot \left(\beta + 2\right) + -1 \cdot \alpha}}}{2} \]
  6. Simplified0.0

    \[\leadsto \frac{\frac{\mathsf{fma}\left(\beta, -2, -2\right)}{\color{blue}{\left(-2 - \beta\right) - \alpha}}}{2} \]
    Proof
    (-.f64 (-.f64 -2 beta) alpha): 0 points increase in error, 0 points decrease in error
    (-.f64 (Rewrite<= unsub-neg_binary64 (+.f64 -2 (neg.f64 beta))) alpha): 0 points increase in error, 0 points decrease in error
    (-.f64 (+.f64 (Rewrite<= metadata-eval (neg.f64 2)) (neg.f64 beta)) alpha): 0 points increase in error, 0 points decrease in error
    (-.f64 (Rewrite<= distribute-neg-in_binary64 (neg.f64 (+.f64 2 beta))) alpha): 0 points increase in error, 0 points decrease in error
    (-.f64 (neg.f64 (Rewrite<= +-commutative_binary64 (+.f64 beta 2))) alpha): 0 points increase in error, 0 points decrease in error
    (-.f64 (Rewrite<= mul-1-neg_binary64 (*.f64 -1 (+.f64 beta 2))) alpha): 0 points increase in error, 0 points decrease in error
    (Rewrite<= unsub-neg_binary64 (+.f64 (*.f64 -1 (+.f64 beta 2)) (neg.f64 alpha))): 0 points increase in error, 0 points decrease in error
    (+.f64 (*.f64 -1 (+.f64 beta 2)) (Rewrite<= mul-1-neg_binary64 (*.f64 -1 alpha))): 0 points increase in error, 0 points decrease in error
  7. Final simplification0.0

    \[\leadsto \frac{\frac{\mathsf{fma}\left(\beta, -2, -2\right)}{\left(-2 - \beta\right) - \alpha}}{2} \]

Alternatives

Alternative 1
Error0.1
Cost1732
\[\begin{array}{l} t_0 := 2 + \left(\beta + \alpha\right)\\ \mathbf{if}\;\frac{\beta - \alpha}{t_0} \leq -0.99999:\\ \;\;\;\;\frac{\frac{-2 + \beta \cdot -2}{\alpha} \cdot \left(-1 + \frac{\beta + 2}{\alpha}\right)}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{1 - \frac{\alpha - \beta}{t_0}}{2}\\ \end{array} \]
Alternative 2
Error0.2
Cost1476
\[\begin{array}{l} t_0 := 2 + \left(\beta + \alpha\right)\\ \mathbf{if}\;\frac{\beta - \alpha}{t_0} \leq -0.99999:\\ \;\;\;\;\frac{\frac{2 + \left(\beta + \beta\right)}{\alpha}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{1 - \frac{\alpha - \beta}{t_0}}{2}\\ \end{array} \]
Alternative 3
Error5.5
Cost972
\[\begin{array}{l} \mathbf{if}\;\beta \leq 33.878197496075174:\\ \;\;\;\;\frac{\frac{2}{\alpha + 2}}{2}\\ \mathbf{elif}\;\beta \leq 8.483256577995119 \cdot 10^{+59}:\\ \;\;\;\;\frac{1 + \frac{\beta}{\beta + 2}}{2}\\ \mathbf{elif}\;\beta \leq 2.69190971863024 \cdot 10^{+83}:\\ \;\;\;\;\frac{\beta}{\alpha}\\ \mathbf{else}:\\ \;\;\;\;\frac{2 + -2 \cdot \frac{\alpha}{\beta}}{2}\\ \end{array} \]
Alternative 4
Error5.5
Cost840
\[\begin{array}{l} \mathbf{if}\;\beta \leq 33.878197496075174:\\ \;\;\;\;\frac{\frac{2}{\alpha + 2}}{2}\\ \mathbf{elif}\;\beta \leq 8.483256577995119 \cdot 10^{+59}:\\ \;\;\;\;\frac{1 + \frac{\beta}{\beta + 2}}{2}\\ \mathbf{elif}\;\beta \leq 2.69190971863024 \cdot 10^{+83}:\\ \;\;\;\;\frac{\beta}{\alpha}\\ \mathbf{else}:\\ \;\;\;\;1\\ \end{array} \]
Alternative 5
Error22.5
Cost720
\[\begin{array}{l} \mathbf{if}\;\beta \leq 6.30204757378725 \cdot 10^{-127}:\\ \;\;\;\;0.5\\ \mathbf{elif}\;\beta \leq 1.2554716294611767 \cdot 10^{-19}:\\ \;\;\;\;\frac{\frac{2}{\alpha}}{2}\\ \mathbf{elif}\;\beta \leq 8.483256577995119 \cdot 10^{+59}:\\ \;\;\;\;1\\ \mathbf{elif}\;\beta \leq 2.69190971863024 \cdot 10^{+83}:\\ \;\;\;\;\frac{\beta}{\alpha}\\ \mathbf{else}:\\ \;\;\;\;1\\ \end{array} \]
Alternative 6
Error5.5
Cost712
\[\begin{array}{l} \mathbf{if}\;\beta \leq 33.878197496075174:\\ \;\;\;\;\frac{\frac{2}{\alpha + 2}}{2}\\ \mathbf{elif}\;\beta \leq 8.483256577995119 \cdot 10^{+59}:\\ \;\;\;\;\frac{2 + \frac{-2}{\beta}}{2}\\ \mathbf{elif}\;\beta \leq 2.69190971863024 \cdot 10^{+83}:\\ \;\;\;\;\frac{\beta}{\alpha}\\ \mathbf{else}:\\ \;\;\;\;1\\ \end{array} \]
Alternative 7
Error19.1
Cost588
\[\begin{array}{l} \mathbf{if}\;\beta \leq 33.878197496075174:\\ \;\;\;\;0.5\\ \mathbf{elif}\;\beta \leq 8.483256577995119 \cdot 10^{+59}:\\ \;\;\;\;1\\ \mathbf{elif}\;\beta \leq 2.69190971863024 \cdot 10^{+83}:\\ \;\;\;\;\frac{\beta}{\alpha}\\ \mathbf{else}:\\ \;\;\;\;1\\ \end{array} \]
Alternative 8
Error5.7
Cost588
\[\begin{array}{l} \mathbf{if}\;\beta \leq 33.878197496075174:\\ \;\;\;\;\frac{\frac{2}{\alpha + 2}}{2}\\ \mathbf{elif}\;\beta \leq 8.483256577995119 \cdot 10^{+59}:\\ \;\;\;\;1\\ \mathbf{elif}\;\beta \leq 2.69190971863024 \cdot 10^{+83}:\\ \;\;\;\;\frac{\beta}{\alpha}\\ \mathbf{else}:\\ \;\;\;\;1\\ \end{array} \]
Alternative 9
Error29.1
Cost324
\[\begin{array}{l} \mathbf{if}\;\alpha \leq 3.683815886130405 \cdot 10^{+58}:\\ \;\;\;\;0.5\\ \mathbf{else}:\\ \;\;\;\;\frac{\beta}{\alpha}\\ \end{array} \]
Alternative 10
Error58.1
Cost192
\[\frac{\beta}{\alpha} \]

Error

Reproduce

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