| Alternative 1 | |
|---|---|
| Accuracy | 84.9% |
| Cost | 708 |
\[\begin{array}{l}
\mathbf{if}\;\beta \leq 2 \cdot 10^{+134}:\\
\;\;\;\;0.0625\\
\mathbf{else}:\\
\;\;\;\;\frac{\alpha + i}{\beta} \cdot \frac{i}{\beta}\\
\end{array}
\]
(FPCore (alpha beta i) :precision binary64 (/ (/ (* (* i (+ (+ alpha beta) i)) (+ (* beta alpha) (* i (+ (+ alpha beta) i)))) (* (+ (+ alpha beta) (* 2.0 i)) (+ (+ alpha beta) (* 2.0 i)))) (- (* (+ (+ alpha beta) (* 2.0 i)) (+ (+ alpha beta) (* 2.0 i))) 1.0)))
(FPCore (alpha beta i)
:precision binary64
(let* ((t_0 (+ (* beta 2.0) (* alpha 2.0))) (t_1 (pow (+ beta alpha) 2.0)))
(if (<= beta 2.7e+134)
(-
(+
(/
(+
(+
(*
-2.0
(* (+ beta alpha) (- (* 0.0625 t_0) (* (+ beta alpha) 0.125))))
(*
-0.00390625
(+ (* t_1 16.0) (+ (* t_1 4.0) (* 4.0 (+ -1.0 t_1))))))
(* 0.0625 (+ (* beta alpha) t_1)))
(pow i 2.0))
(+ 0.0625 (* 0.0625 (/ t_0 i))))
(* 0.125 (/ (+ beta alpha) i)))
(* (/ (+ alpha i) beta) (/ i beta)))))double code(double alpha, double beta, double i) {
return (((i * ((alpha + beta) + i)) * ((beta * alpha) + (i * ((alpha + beta) + i)))) / (((alpha + beta) + (2.0 * i)) * ((alpha + beta) + (2.0 * i)))) / ((((alpha + beta) + (2.0 * i)) * ((alpha + beta) + (2.0 * i))) - 1.0);
}
double code(double alpha, double beta, double i) {
double t_0 = (beta * 2.0) + (alpha * 2.0);
double t_1 = pow((beta + alpha), 2.0);
double tmp;
if (beta <= 2.7e+134) {
tmp = (((((-2.0 * ((beta + alpha) * ((0.0625 * t_0) - ((beta + alpha) * 0.125)))) + (-0.00390625 * ((t_1 * 16.0) + ((t_1 * 4.0) + (4.0 * (-1.0 + t_1)))))) + (0.0625 * ((beta * alpha) + t_1))) / pow(i, 2.0)) + (0.0625 + (0.0625 * (t_0 / i)))) - (0.125 * ((beta + alpha) / i));
} else {
tmp = ((alpha + i) / beta) * (i / beta);
}
return tmp;
}
real(8) function code(alpha, beta, i)
real(8), intent (in) :: alpha
real(8), intent (in) :: beta
real(8), intent (in) :: i
code = (((i * ((alpha + beta) + i)) * ((beta * alpha) + (i * ((alpha + beta) + i)))) / (((alpha + beta) + (2.0d0 * i)) * ((alpha + beta) + (2.0d0 * i)))) / ((((alpha + beta) + (2.0d0 * i)) * ((alpha + beta) + (2.0d0 * i))) - 1.0d0)
end function
real(8) function code(alpha, beta, i)
real(8), intent (in) :: alpha
real(8), intent (in) :: beta
real(8), intent (in) :: i
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (beta * 2.0d0) + (alpha * 2.0d0)
t_1 = (beta + alpha) ** 2.0d0
if (beta <= 2.7d+134) then
tmp = ((((((-2.0d0) * ((beta + alpha) * ((0.0625d0 * t_0) - ((beta + alpha) * 0.125d0)))) + ((-0.00390625d0) * ((t_1 * 16.0d0) + ((t_1 * 4.0d0) + (4.0d0 * ((-1.0d0) + t_1)))))) + (0.0625d0 * ((beta * alpha) + t_1))) / (i ** 2.0d0)) + (0.0625d0 + (0.0625d0 * (t_0 / i)))) - (0.125d0 * ((beta + alpha) / i))
else
tmp = ((alpha + i) / beta) * (i / beta)
end if
code = tmp
end function
public static double code(double alpha, double beta, double i) {
return (((i * ((alpha + beta) + i)) * ((beta * alpha) + (i * ((alpha + beta) + i)))) / (((alpha + beta) + (2.0 * i)) * ((alpha + beta) + (2.0 * i)))) / ((((alpha + beta) + (2.0 * i)) * ((alpha + beta) + (2.0 * i))) - 1.0);
}
public static double code(double alpha, double beta, double i) {
double t_0 = (beta * 2.0) + (alpha * 2.0);
double t_1 = Math.pow((beta + alpha), 2.0);
double tmp;
if (beta <= 2.7e+134) {
tmp = (((((-2.0 * ((beta + alpha) * ((0.0625 * t_0) - ((beta + alpha) * 0.125)))) + (-0.00390625 * ((t_1 * 16.0) + ((t_1 * 4.0) + (4.0 * (-1.0 + t_1)))))) + (0.0625 * ((beta * alpha) + t_1))) / Math.pow(i, 2.0)) + (0.0625 + (0.0625 * (t_0 / i)))) - (0.125 * ((beta + alpha) / i));
} else {
tmp = ((alpha + i) / beta) * (i / beta);
}
return tmp;
}
def code(alpha, beta, i): return (((i * ((alpha + beta) + i)) * ((beta * alpha) + (i * ((alpha + beta) + i)))) / (((alpha + beta) + (2.0 * i)) * ((alpha + beta) + (2.0 * i)))) / ((((alpha + beta) + (2.0 * i)) * ((alpha + beta) + (2.0 * i))) - 1.0)
def code(alpha, beta, i): t_0 = (beta * 2.0) + (alpha * 2.0) t_1 = math.pow((beta + alpha), 2.0) tmp = 0 if beta <= 2.7e+134: tmp = (((((-2.0 * ((beta + alpha) * ((0.0625 * t_0) - ((beta + alpha) * 0.125)))) + (-0.00390625 * ((t_1 * 16.0) + ((t_1 * 4.0) + (4.0 * (-1.0 + t_1)))))) + (0.0625 * ((beta * alpha) + t_1))) / math.pow(i, 2.0)) + (0.0625 + (0.0625 * (t_0 / i)))) - (0.125 * ((beta + alpha) / i)) else: tmp = ((alpha + i) / beta) * (i / beta) return tmp
function code(alpha, beta, i) return Float64(Float64(Float64(Float64(i * Float64(Float64(alpha + beta) + i)) * Float64(Float64(beta * alpha) + Float64(i * Float64(Float64(alpha + beta) + i)))) / Float64(Float64(Float64(alpha + beta) + Float64(2.0 * i)) * Float64(Float64(alpha + beta) + Float64(2.0 * i)))) / Float64(Float64(Float64(Float64(alpha + beta) + Float64(2.0 * i)) * Float64(Float64(alpha + beta) + Float64(2.0 * i))) - 1.0)) end
function code(alpha, beta, i) t_0 = Float64(Float64(beta * 2.0) + Float64(alpha * 2.0)) t_1 = Float64(beta + alpha) ^ 2.0 tmp = 0.0 if (beta <= 2.7e+134) tmp = Float64(Float64(Float64(Float64(Float64(Float64(-2.0 * Float64(Float64(beta + alpha) * Float64(Float64(0.0625 * t_0) - Float64(Float64(beta + alpha) * 0.125)))) + Float64(-0.00390625 * Float64(Float64(t_1 * 16.0) + Float64(Float64(t_1 * 4.0) + Float64(4.0 * Float64(-1.0 + t_1)))))) + Float64(0.0625 * Float64(Float64(beta * alpha) + t_1))) / (i ^ 2.0)) + Float64(0.0625 + Float64(0.0625 * Float64(t_0 / i)))) - Float64(0.125 * Float64(Float64(beta + alpha) / i))); else tmp = Float64(Float64(Float64(alpha + i) / beta) * Float64(i / beta)); end return tmp end
function tmp = code(alpha, beta, i) tmp = (((i * ((alpha + beta) + i)) * ((beta * alpha) + (i * ((alpha + beta) + i)))) / (((alpha + beta) + (2.0 * i)) * ((alpha + beta) + (2.0 * i)))) / ((((alpha + beta) + (2.0 * i)) * ((alpha + beta) + (2.0 * i))) - 1.0); end
function tmp_2 = code(alpha, beta, i) t_0 = (beta * 2.0) + (alpha * 2.0); t_1 = (beta + alpha) ^ 2.0; tmp = 0.0; if (beta <= 2.7e+134) tmp = (((((-2.0 * ((beta + alpha) * ((0.0625 * t_0) - ((beta + alpha) * 0.125)))) + (-0.00390625 * ((t_1 * 16.0) + ((t_1 * 4.0) + (4.0 * (-1.0 + t_1)))))) + (0.0625 * ((beta * alpha) + t_1))) / (i ^ 2.0)) + (0.0625 + (0.0625 * (t_0 / i)))) - (0.125 * ((beta + alpha) / i)); else tmp = ((alpha + i) / beta) * (i / beta); end tmp_2 = tmp; end
code[alpha_, beta_, i_] := N[(N[(N[(N[(i * N[(N[(alpha + beta), $MachinePrecision] + i), $MachinePrecision]), $MachinePrecision] * N[(N[(beta * alpha), $MachinePrecision] + N[(i * N[(N[(alpha + beta), $MachinePrecision] + i), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(N[(N[(alpha + beta), $MachinePrecision] + N[(2.0 * i), $MachinePrecision]), $MachinePrecision] * N[(N[(alpha + beta), $MachinePrecision] + N[(2.0 * i), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(N[(N[(N[(alpha + beta), $MachinePrecision] + N[(2.0 * i), $MachinePrecision]), $MachinePrecision] * N[(N[(alpha + beta), $MachinePrecision] + N[(2.0 * i), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - 1.0), $MachinePrecision]), $MachinePrecision]
code[alpha_, beta_, i_] := Block[{t$95$0 = N[(N[(beta * 2.0), $MachinePrecision] + N[(alpha * 2.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Power[N[(beta + alpha), $MachinePrecision], 2.0], $MachinePrecision]}, If[LessEqual[beta, 2.7e+134], N[(N[(N[(N[(N[(N[(-2.0 * N[(N[(beta + alpha), $MachinePrecision] * N[(N[(0.0625 * t$95$0), $MachinePrecision] - N[(N[(beta + alpha), $MachinePrecision] * 0.125), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(-0.00390625 * N[(N[(t$95$1 * 16.0), $MachinePrecision] + N[(N[(t$95$1 * 4.0), $MachinePrecision] + N[(4.0 * N[(-1.0 + t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(0.0625 * N[(N[(beta * alpha), $MachinePrecision] + t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[Power[i, 2.0], $MachinePrecision]), $MachinePrecision] + N[(0.0625 + N[(0.0625 * N[(t$95$0 / i), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(0.125 * N[(N[(beta + alpha), $MachinePrecision] / i), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(N[(alpha + i), $MachinePrecision] / beta), $MachinePrecision] * N[(i / beta), $MachinePrecision]), $MachinePrecision]]]]
\frac{\frac{\left(i \cdot \left(\left(\alpha + \beta\right) + i\right)\right) \cdot \left(\beta \cdot \alpha + i \cdot \left(\left(\alpha + \beta\right) + i\right)\right)}{\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right)}}{\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right) - 1}
\begin{array}{l}
t_0 := \beta \cdot 2 + \alpha \cdot 2\\
t_1 := {\left(\beta + \alpha\right)}^{2}\\
\mathbf{if}\;\beta \leq 2.7 \cdot 10^{+134}:\\
\;\;\;\;\left(\frac{\left(-2 \cdot \left(\left(\beta + \alpha\right) \cdot \left(0.0625 \cdot t_0 - \left(\beta + \alpha\right) \cdot 0.125\right)\right) + -0.00390625 \cdot \left(t_1 \cdot 16 + \left(t_1 \cdot 4 + 4 \cdot \left(-1 + t_1\right)\right)\right)\right) + 0.0625 \cdot \left(\beta \cdot \alpha + t_1\right)}{{i}^{2}} + \left(0.0625 + 0.0625 \cdot \frac{t_0}{i}\right)\right) - 0.125 \cdot \frac{\beta + \alpha}{i}\\
\mathbf{else}:\\
\;\;\;\;\frac{\alpha + i}{\beta} \cdot \frac{i}{\beta}\\
\end{array}
Results
if beta < 2.7e134Initial program 23.2%
Simplified50.4%
[Start]23.2 | \[ \frac{\frac{\left(i \cdot \left(\left(\alpha + \beta\right) + i\right)\right) \cdot \left(\beta \cdot \alpha + i \cdot \left(\left(\alpha + \beta\right) + i\right)\right)}{\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right)}}{\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right) - 1}
\] |
|---|---|
associate-/l/ [=>]21.2 | \[ \color{blue}{\frac{\left(i \cdot \left(\left(\alpha + \beta\right) + i\right)\right) \cdot \left(\beta \cdot \alpha + i \cdot \left(\left(\alpha + \beta\right) + i\right)\right)}{\left(\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right) - 1\right) \cdot \left(\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right)\right)}}
\] |
associate-*l* [=>]21.1 | \[ \frac{\color{blue}{i \cdot \left(\left(\left(\alpha + \beta\right) + i\right) \cdot \left(\beta \cdot \alpha + i \cdot \left(\left(\alpha + \beta\right) + i\right)\right)\right)}}{\left(\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right) - 1\right) \cdot \left(\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right)\right)}
\] |
times-frac [=>]32.3 | \[ \color{blue}{\frac{i}{\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right) - 1} \cdot \frac{\left(\left(\alpha + \beta\right) + i\right) \cdot \left(\beta \cdot \alpha + i \cdot \left(\left(\alpha + \beta\right) + i\right)\right)}{\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right)}}
\] |
Taylor expanded in i around -inf 91.8%
if 2.7e134 < beta Initial program 0.3%
Simplified0.0%
[Start]0.3 | \[ \frac{\frac{\left(i \cdot \left(\left(\alpha + \beta\right) + i\right)\right) \cdot \left(\beta \cdot \alpha + i \cdot \left(\left(\alpha + \beta\right) + i\right)\right)}{\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right)}}{\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right) - 1}
\] |
|---|---|
associate-/l/ [=>]0.0 | \[ \color{blue}{\frac{\left(i \cdot \left(\left(\alpha + \beta\right) + i\right)\right) \cdot \left(\beta \cdot \alpha + i \cdot \left(\left(\alpha + \beta\right) + i\right)\right)}{\left(\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right) - 1\right) \cdot \left(\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right)\right)}}
\] |
+-commutative [=>]0.0 | \[ \frac{\left(i \cdot \color{blue}{\left(i + \left(\alpha + \beta\right)\right)}\right) \cdot \left(\beta \cdot \alpha + i \cdot \left(\left(\alpha + \beta\right) + i\right)\right)}{\left(\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right) - 1\right) \cdot \left(\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right)\right)}
\] |
fma-def [=>]0.0 | \[ \frac{\left(i \cdot \left(i + \left(\alpha + \beta\right)\right)\right) \cdot \color{blue}{\mathsf{fma}\left(\beta, \alpha, i \cdot \left(\left(\alpha + \beta\right) + i\right)\right)}}{\left(\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right) - 1\right) \cdot \left(\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right)\right)}
\] |
+-commutative [=>]0.0 | \[ \frac{\left(i \cdot \left(i + \left(\alpha + \beta\right)\right)\right) \cdot \mathsf{fma}\left(\beta, \alpha, i \cdot \color{blue}{\left(i + \left(\alpha + \beta\right)\right)}\right)}{\left(\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right) - 1\right) \cdot \left(\left(\left(\alpha + \beta\right) + 2 \cdot i\right) \cdot \left(\left(\alpha + \beta\right) + 2 \cdot i\right)\right)}
\] |
Taylor expanded in beta around inf 26.1%
Simplified28.0%
[Start]26.1 | \[ \frac{\left(i + \alpha\right) \cdot i}{{\beta}^{2}}
\] |
|---|---|
associate-/l* [=>]28.0 | \[ \color{blue}{\frac{i + \alpha}{\frac{{\beta}^{2}}{i}}}
\] |
unpow2 [=>]28.0 | \[ \frac{i + \alpha}{\frac{\color{blue}{\beta \cdot \beta}}{i}}
\] |
Applied egg-rr71.2%
[Start]28.0 | \[ \frac{i + \alpha}{\frac{\beta \cdot \beta}{i}}
\] |
|---|---|
associate-/l* [=>]47.7 | \[ \frac{i + \alpha}{\color{blue}{\frac{\beta}{\frac{i}{\beta}}}}
\] |
associate-/r/ [=>]71.2 | \[ \color{blue}{\frac{i + \alpha}{\beta} \cdot \frac{i}{\beta}}
\] |
Final simplification84.9%
| Alternative 1 | |
|---|---|
| Accuracy | 84.9% |
| Cost | 708 |
| Alternative 2 | |
|---|---|
| Accuracy | 75.3% |
| Cost | 580 |
| Alternative 3 | |
|---|---|
| Accuracy | 82.8% |
| Cost | 580 |
| Alternative 4 | |
|---|---|
| Accuracy | 82.9% |
| Cost | 580 |
| Alternative 5 | |
|---|---|
| Accuracy | 71.0% |
| Cost | 64 |
herbie shell --seed 2023153
(FPCore (alpha beta i)
:name "Octave 3.8, jcobi/4"
:precision binary64
:pre (and (and (> alpha -1.0) (> beta -1.0)) (> i 1.0))
(/ (/ (* (* i (+ (+ alpha beta) i)) (+ (* beta alpha) (* i (+ (+ alpha beta) i)))) (* (+ (+ alpha beta) (* 2.0 i)) (+ (+ alpha beta) (* 2.0 i)))) (- (* (+ (+ alpha beta) (* 2.0 i)) (+ (+ alpha beta) (* 2.0 i))) 1.0)))