| Alternative 1 | |
|---|---|
| Error | 14.5 |
| Cost | 1088 |
\[0.0625 \cdot \frac{2 \cdot \left(\beta + \alpha\right)}{i} + \left(0.0625 - 0.125 \cdot \frac{\beta}{i}\right)
\]
(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 (+ (+ alpha beta) (* 2.0 i)))
(t_1 (* t_0 t_0))
(t_2 (* i (+ (+ alpha beta) i)))
(t_3 (/ (/ (* t_2 (+ (* beta alpha) t_2)) t_1) (- t_1 1.0))))
(if (<= t_3 0.1)
t_3
(+
(* 0.0625 (/ (* 2.0 (+ beta alpha)) i))
(- 0.0625 (* 0.125 (/ beta i)))))))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 = (alpha + beta) + (2.0 * i);
double t_1 = t_0 * t_0;
double t_2 = i * ((alpha + beta) + i);
double t_3 = ((t_2 * ((beta * alpha) + t_2)) / t_1) / (t_1 - 1.0);
double tmp;
if (t_3 <= 0.1) {
tmp = t_3;
} else {
tmp = (0.0625 * ((2.0 * (beta + alpha)) / i)) + (0.0625 - (0.125 * (beta / i)));
}
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) :: t_2
real(8) :: t_3
real(8) :: tmp
t_0 = (alpha + beta) + (2.0d0 * i)
t_1 = t_0 * t_0
t_2 = i * ((alpha + beta) + i)
t_3 = ((t_2 * ((beta * alpha) + t_2)) / t_1) / (t_1 - 1.0d0)
if (t_3 <= 0.1d0) then
tmp = t_3
else
tmp = (0.0625d0 * ((2.0d0 * (beta + alpha)) / i)) + (0.0625d0 - (0.125d0 * (beta / i)))
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 = (alpha + beta) + (2.0 * i);
double t_1 = t_0 * t_0;
double t_2 = i * ((alpha + beta) + i);
double t_3 = ((t_2 * ((beta * alpha) + t_2)) / t_1) / (t_1 - 1.0);
double tmp;
if (t_3 <= 0.1) {
tmp = t_3;
} else {
tmp = (0.0625 * ((2.0 * (beta + alpha)) / i)) + (0.0625 - (0.125 * (beta / i)));
}
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 = (alpha + beta) + (2.0 * i) t_1 = t_0 * t_0 t_2 = i * ((alpha + beta) + i) t_3 = ((t_2 * ((beta * alpha) + t_2)) / t_1) / (t_1 - 1.0) tmp = 0 if t_3 <= 0.1: tmp = t_3 else: tmp = (0.0625 * ((2.0 * (beta + alpha)) / i)) + (0.0625 - (0.125 * (beta / i))) 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(alpha + beta) + Float64(2.0 * i)) t_1 = Float64(t_0 * t_0) t_2 = Float64(i * Float64(Float64(alpha + beta) + i)) t_3 = Float64(Float64(Float64(t_2 * Float64(Float64(beta * alpha) + t_2)) / t_1) / Float64(t_1 - 1.0)) tmp = 0.0 if (t_3 <= 0.1) tmp = t_3; else tmp = Float64(Float64(0.0625 * Float64(Float64(2.0 * Float64(beta + alpha)) / i)) + Float64(0.0625 - Float64(0.125 * Float64(beta / i)))); 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 = (alpha + beta) + (2.0 * i); t_1 = t_0 * t_0; t_2 = i * ((alpha + beta) + i); t_3 = ((t_2 * ((beta * alpha) + t_2)) / t_1) / (t_1 - 1.0); tmp = 0.0; if (t_3 <= 0.1) tmp = t_3; else tmp = (0.0625 * ((2.0 * (beta + alpha)) / i)) + (0.0625 - (0.125 * (beta / i))); 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[(alpha + beta), $MachinePrecision] + N[(2.0 * i), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 * t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[(i * N[(N[(alpha + beta), $MachinePrecision] + i), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(N[(N[(t$95$2 * N[(N[(beta * alpha), $MachinePrecision] + t$95$2), $MachinePrecision]), $MachinePrecision] / t$95$1), $MachinePrecision] / N[(t$95$1 - 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$3, 0.1], t$95$3, N[(N[(0.0625 * N[(N[(2.0 * N[(beta + alpha), $MachinePrecision]), $MachinePrecision] / i), $MachinePrecision]), $MachinePrecision] + N[(0.0625 - N[(0.125 * N[(beta / i), $MachinePrecision]), $MachinePrecision]), $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 := \left(\alpha + \beta\right) + 2 \cdot i\\
t_1 := t_0 \cdot t_0\\
t_2 := i \cdot \left(\left(\alpha + \beta\right) + i\right)\\
t_3 := \frac{\frac{t_2 \cdot \left(\beta \cdot \alpha + t_2\right)}{t_1}}{t_1 - 1}\\
\mathbf{if}\;t_3 \leq 0.1:\\
\;\;\;\;t_3\\
\mathbf{else}:\\
\;\;\;\;0.0625 \cdot \frac{2 \cdot \left(\beta + \alpha\right)}{i} + \left(0.0625 - 0.125 \cdot \frac{\beta}{i}\right)\\
\end{array}
Results
if (/.f64 (/.f64 (*.f64 (*.f64 i (+.f64 (+.f64 alpha beta) i)) (+.f64 (*.f64 beta alpha) (*.f64 i (+.f64 (+.f64 alpha beta) i)))) (*.f64 (+.f64 (+.f64 alpha beta) (*.f64 2 i)) (+.f64 (+.f64 alpha beta) (*.f64 2 i)))) (-.f64 (*.f64 (+.f64 (+.f64 alpha beta) (*.f64 2 i)) (+.f64 (+.f64 alpha beta) (*.f64 2 i))) 1)) < 0.10000000000000001Initial program 0.3
if 0.10000000000000001 < (/.f64 (/.f64 (*.f64 (*.f64 i (+.f64 (+.f64 alpha beta) i)) (+.f64 (*.f64 beta alpha) (*.f64 i (+.f64 (+.f64 alpha beta) i)))) (*.f64 (+.f64 (+.f64 alpha beta) (*.f64 2 i)) (+.f64 (+.f64 alpha beta) (*.f64 2 i)))) (-.f64 (*.f64 (+.f64 (+.f64 alpha beta) (*.f64 2 i)) (+.f64 (+.f64 alpha beta) (*.f64 2 i))) 1)) Initial program 64.0
Simplified64.0
[Start]64.0 | \[ \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}
\] |
|---|
Taylor expanded in i around inf 14.6
Simplified14.6
[Start]14.6 | \[ \left(0.0625 + 0.0625 \cdot \frac{2 \cdot \beta + 2 \cdot \alpha}{i}\right) - 0.125 \cdot \frac{\beta + \alpha}{i}
\] |
|---|---|
rational_best_45_simplify-109 [=>]14.6 | \[ \color{blue}{0.0625 \cdot \frac{2 \cdot \beta + 2 \cdot \alpha}{i} + \left(0.0625 - 0.125 \cdot \frac{\beta + \alpha}{i}\right)}
\] |
rational_best_45_simplify-91 [=>]14.6 | \[ 0.0625 \cdot \frac{\color{blue}{\beta \cdot 2} + 2 \cdot \alpha}{i} + \left(0.0625 - 0.125 \cdot \frac{\beta + \alpha}{i}\right)
\] |
rational_best_45_simplify-71 [=>]14.6 | \[ 0.0625 \cdot \frac{\color{blue}{2 \cdot \left(\beta + \alpha\right)}}{i} + \left(0.0625 - 0.125 \cdot \frac{\beta + \alpha}{i}\right)
\] |
Taylor expanded in beta around inf 14.6
Final simplification12.4
| Alternative 1 | |
|---|---|
| Error | 14.5 |
| Cost | 1088 |
| Alternative 2 | |
|---|---|
| Error | 16.7 |
| Cost | 708 |
| Alternative 3 | |
|---|---|
| Error | 18.6 |
| Cost | 64 |
herbie shell --seed 2023098
(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)))