
(FPCore (alpha beta) :precision binary64 (/ (+ (/ (- beta alpha) (+ (+ alpha beta) 2.0)) 1.0) 2.0))
double code(double alpha, double beta) {
return (((beta - alpha) / ((alpha + beta) + 2.0)) + 1.0) / 2.0;
}
real(8) function code(alpha, beta)
real(8), intent (in) :: alpha
real(8), intent (in) :: beta
code = (((beta - alpha) / ((alpha + beta) + 2.0d0)) + 1.0d0) / 2.0d0
end function
public static double code(double alpha, double beta) {
return (((beta - alpha) / ((alpha + beta) + 2.0)) + 1.0) / 2.0;
}
def code(alpha, beta): return (((beta - alpha) / ((alpha + beta) + 2.0)) + 1.0) / 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 tmp = code(alpha, beta) tmp = (((beta - alpha) / ((alpha + beta) + 2.0)) + 1.0) / 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]
\begin{array}{l}
\\
\frac{\frac{\beta - \alpha}{\left(\alpha + \beta\right) + 2} + 1}{2}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 10 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (alpha beta) :precision binary64 (/ (+ (/ (- beta alpha) (+ (+ alpha beta) 2.0)) 1.0) 2.0))
double code(double alpha, double beta) {
return (((beta - alpha) / ((alpha + beta) + 2.0)) + 1.0) / 2.0;
}
real(8) function code(alpha, beta)
real(8), intent (in) :: alpha
real(8), intent (in) :: beta
code = (((beta - alpha) / ((alpha + beta) + 2.0d0)) + 1.0d0) / 2.0d0
end function
public static double code(double alpha, double beta) {
return (((beta - alpha) / ((alpha + beta) + 2.0)) + 1.0) / 2.0;
}
def code(alpha, beta): return (((beta - alpha) / ((alpha + beta) + 2.0)) + 1.0) / 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 tmp = code(alpha, beta) tmp = (((beta - alpha) / ((alpha + beta) + 2.0)) + 1.0) / 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]
\begin{array}{l}
\\
\frac{\frac{\beta - \alpha}{\left(\alpha + \beta\right) + 2} + 1}{2}
\end{array}
(FPCore (alpha beta)
:precision binary64
(if (<= (/ (- beta alpha) (+ (+ beta alpha) 2.0)) -1.0)
(/ (/ (+ 2.0 (* beta 2.0)) alpha) 2.0)
(+
0.5
(* (- alpha beta) (/ -0.5 (* beta (- (/ (- alpha -2.0) beta) -1.0)))))))
double code(double alpha, double beta) {
double tmp;
if (((beta - alpha) / ((beta + alpha) + 2.0)) <= -1.0) {
tmp = ((2.0 + (beta * 2.0)) / alpha) / 2.0;
} else {
tmp = 0.5 + ((alpha - beta) * (-0.5 / (beta * (((alpha - -2.0) / beta) - -1.0))));
}
return tmp;
}
real(8) function code(alpha, beta)
real(8), intent (in) :: alpha
real(8), intent (in) :: beta
real(8) :: tmp
if (((beta - alpha) / ((beta + alpha) + 2.0d0)) <= (-1.0d0)) then
tmp = ((2.0d0 + (beta * 2.0d0)) / alpha) / 2.0d0
else
tmp = 0.5d0 + ((alpha - beta) * ((-0.5d0) / (beta * (((alpha - (-2.0d0)) / beta) - (-1.0d0)))))
end if
code = tmp
end function
public static double code(double alpha, double beta) {
double tmp;
if (((beta - alpha) / ((beta + alpha) + 2.0)) <= -1.0) {
tmp = ((2.0 + (beta * 2.0)) / alpha) / 2.0;
} else {
tmp = 0.5 + ((alpha - beta) * (-0.5 / (beta * (((alpha - -2.0) / beta) - -1.0))));
}
return tmp;
}
def code(alpha, beta): tmp = 0 if ((beta - alpha) / ((beta + alpha) + 2.0)) <= -1.0: tmp = ((2.0 + (beta * 2.0)) / alpha) / 2.0 else: tmp = 0.5 + ((alpha - beta) * (-0.5 / (beta * (((alpha - -2.0) / beta) - -1.0)))) return tmp
function code(alpha, beta) tmp = 0.0 if (Float64(Float64(beta - alpha) / Float64(Float64(beta + alpha) + 2.0)) <= -1.0) tmp = Float64(Float64(Float64(2.0 + Float64(beta * 2.0)) / alpha) / 2.0); else tmp = Float64(0.5 + Float64(Float64(alpha - beta) * Float64(-0.5 / Float64(beta * Float64(Float64(Float64(alpha - -2.0) / beta) - -1.0))))); end return tmp end
function tmp_2 = code(alpha, beta) tmp = 0.0; if (((beta - alpha) / ((beta + alpha) + 2.0)) <= -1.0) tmp = ((2.0 + (beta * 2.0)) / alpha) / 2.0; else tmp = 0.5 + ((alpha - beta) * (-0.5 / (beta * (((alpha - -2.0) / beta) - -1.0)))); end tmp_2 = tmp; end
code[alpha_, beta_] := If[LessEqual[N[(N[(beta - alpha), $MachinePrecision] / N[(N[(beta + alpha), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision], -1.0], N[(N[(N[(2.0 + N[(beta * 2.0), $MachinePrecision]), $MachinePrecision] / alpha), $MachinePrecision] / 2.0), $MachinePrecision], N[(0.5 + N[(N[(alpha - beta), $MachinePrecision] * N[(-0.5 / N[(beta * N[(N[(N[(alpha - -2.0), $MachinePrecision] / beta), $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\frac{\beta - \alpha}{\left(\beta + \alpha\right) + 2} \leq -1:\\
\;\;\;\;\frac{\frac{2 + \beta \cdot 2}{\alpha}}{2}\\
\mathbf{else}:\\
\;\;\;\;0.5 + \left(\alpha - \beta\right) \cdot \frac{-0.5}{\beta \cdot \left(\frac{\alpha - -2}{\beta} - -1\right)}\\
\end{array}
\end{array}
if (/.f64 (-.f64 beta alpha) (+.f64 (+.f64 alpha beta) #s(literal 2 binary64))) < -1Initial program 5.2%
+-commutative5.2%
Simplified5.2%
Taylor expanded in alpha around inf 100.0%
*-commutative100.0%
Simplified100.0%
if -1 < (/.f64 (-.f64 beta alpha) (+.f64 (+.f64 alpha beta) #s(literal 2 binary64))) Initial program 99.7%
+-commutative99.7%
sub-neg99.7%
+-commutative99.7%
neg-sub099.7%
associate-+l-99.7%
sub0-neg99.7%
distribute-frac-neg99.7%
+-commutative99.7%
sub-neg99.7%
div-sub99.7%
sub-neg99.7%
metadata-eval99.7%
neg-mul-199.7%
*-commutative99.7%
+-commutative99.7%
associate-/l/99.7%
associate-*l/99.7%
Simplified99.7%
Taylor expanded in beta around -inf 99.7%
associate-*r*99.7%
neg-mul-199.7%
sub-neg99.7%
associate-*r/99.7%
distribute-lft-in99.7%
metadata-eval99.7%
mul-1-neg99.7%
unsub-neg99.7%
metadata-eval99.7%
Simplified99.7%
Final simplification99.8%
(FPCore (alpha beta) :precision binary64 (if (<= (/ (- beta alpha) (+ (+ beta alpha) 2.0)) -1.0) (/ (/ (+ 2.0 (* beta 2.0)) alpha) 2.0) (- 0.5 (* (/ -0.5 (+ beta (+ alpha 2.0))) (- beta alpha)))))
double code(double alpha, double beta) {
double tmp;
if (((beta - alpha) / ((beta + alpha) + 2.0)) <= -1.0) {
tmp = ((2.0 + (beta * 2.0)) / alpha) / 2.0;
} else {
tmp = 0.5 - ((-0.5 / (beta + (alpha + 2.0))) * (beta - alpha));
}
return tmp;
}
real(8) function code(alpha, beta)
real(8), intent (in) :: alpha
real(8), intent (in) :: beta
real(8) :: tmp
if (((beta - alpha) / ((beta + alpha) + 2.0d0)) <= (-1.0d0)) then
tmp = ((2.0d0 + (beta * 2.0d0)) / alpha) / 2.0d0
else
tmp = 0.5d0 - (((-0.5d0) / (beta + (alpha + 2.0d0))) * (beta - alpha))
end if
code = tmp
end function
public static double code(double alpha, double beta) {
double tmp;
if (((beta - alpha) / ((beta + alpha) + 2.0)) <= -1.0) {
tmp = ((2.0 + (beta * 2.0)) / alpha) / 2.0;
} else {
tmp = 0.5 - ((-0.5 / (beta + (alpha + 2.0))) * (beta - alpha));
}
return tmp;
}
def code(alpha, beta): tmp = 0 if ((beta - alpha) / ((beta + alpha) + 2.0)) <= -1.0: tmp = ((2.0 + (beta * 2.0)) / alpha) / 2.0 else: tmp = 0.5 - ((-0.5 / (beta + (alpha + 2.0))) * (beta - alpha)) return tmp
function code(alpha, beta) tmp = 0.0 if (Float64(Float64(beta - alpha) / Float64(Float64(beta + alpha) + 2.0)) <= -1.0) tmp = Float64(Float64(Float64(2.0 + Float64(beta * 2.0)) / alpha) / 2.0); else tmp = Float64(0.5 - Float64(Float64(-0.5 / Float64(beta + Float64(alpha + 2.0))) * Float64(beta - alpha))); end return tmp end
function tmp_2 = code(alpha, beta) tmp = 0.0; if (((beta - alpha) / ((beta + alpha) + 2.0)) <= -1.0) tmp = ((2.0 + (beta * 2.0)) / alpha) / 2.0; else tmp = 0.5 - ((-0.5 / (beta + (alpha + 2.0))) * (beta - alpha)); end tmp_2 = tmp; end
code[alpha_, beta_] := If[LessEqual[N[(N[(beta - alpha), $MachinePrecision] / N[(N[(beta + alpha), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision], -1.0], N[(N[(N[(2.0 + N[(beta * 2.0), $MachinePrecision]), $MachinePrecision] / alpha), $MachinePrecision] / 2.0), $MachinePrecision], N[(0.5 - N[(N[(-0.5 / N[(beta + N[(alpha + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(beta - alpha), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\frac{\beta - \alpha}{\left(\beta + \alpha\right) + 2} \leq -1:\\
\;\;\;\;\frac{\frac{2 + \beta \cdot 2}{\alpha}}{2}\\
\mathbf{else}:\\
\;\;\;\;0.5 - \frac{-0.5}{\beta + \left(\alpha + 2\right)} \cdot \left(\beta - \alpha\right)\\
\end{array}
\end{array}
if (/.f64 (-.f64 beta alpha) (+.f64 (+.f64 alpha beta) #s(literal 2 binary64))) < -1Initial program 5.2%
+-commutative5.2%
Simplified5.2%
Taylor expanded in alpha around inf 100.0%
*-commutative100.0%
Simplified100.0%
if -1 < (/.f64 (-.f64 beta alpha) (+.f64 (+.f64 alpha beta) #s(literal 2 binary64))) Initial program 99.7%
+-commutative99.7%
sub-neg99.7%
+-commutative99.7%
neg-sub099.7%
associate-+l-99.7%
sub0-neg99.7%
distribute-frac-neg99.7%
+-commutative99.7%
sub-neg99.7%
div-sub99.7%
sub-neg99.7%
metadata-eval99.7%
neg-mul-199.7%
*-commutative99.7%
+-commutative99.7%
associate-/l/99.7%
associate-*l/99.7%
Simplified99.7%
Final simplification99.8%
(FPCore (alpha beta)
:precision binary64
(let* ((t_0 (/ (+ 1.0 (* beta 0.5)) 2.0)))
(if (<= beta 1.46e-206)
t_0
(if (<= beta 4e-175) (/ (/ 2.0 alpha) 2.0) (if (<= beta 2.0) t_0 1.0)))))
double code(double alpha, double beta) {
double t_0 = (1.0 + (beta * 0.5)) / 2.0;
double tmp;
if (beta <= 1.46e-206) {
tmp = t_0;
} else if (beta <= 4e-175) {
tmp = (2.0 / alpha) / 2.0;
} else if (beta <= 2.0) {
tmp = t_0;
} else {
tmp = 1.0;
}
return tmp;
}
real(8) function code(alpha, beta)
real(8), intent (in) :: alpha
real(8), intent (in) :: beta
real(8) :: t_0
real(8) :: tmp
t_0 = (1.0d0 + (beta * 0.5d0)) / 2.0d0
if (beta <= 1.46d-206) then
tmp = t_0
else if (beta <= 4d-175) then
tmp = (2.0d0 / alpha) / 2.0d0
else if (beta <= 2.0d0) then
tmp = t_0
else
tmp = 1.0d0
end if
code = tmp
end function
public static double code(double alpha, double beta) {
double t_0 = (1.0 + (beta * 0.5)) / 2.0;
double tmp;
if (beta <= 1.46e-206) {
tmp = t_0;
} else if (beta <= 4e-175) {
tmp = (2.0 / alpha) / 2.0;
} else if (beta <= 2.0) {
tmp = t_0;
} else {
tmp = 1.0;
}
return tmp;
}
def code(alpha, beta): t_0 = (1.0 + (beta * 0.5)) / 2.0 tmp = 0 if beta <= 1.46e-206: tmp = t_0 elif beta <= 4e-175: tmp = (2.0 / alpha) / 2.0 elif beta <= 2.0: tmp = t_0 else: tmp = 1.0 return tmp
function code(alpha, beta) t_0 = Float64(Float64(1.0 + Float64(beta * 0.5)) / 2.0) tmp = 0.0 if (beta <= 1.46e-206) tmp = t_0; elseif (beta <= 4e-175) tmp = Float64(Float64(2.0 / alpha) / 2.0); elseif (beta <= 2.0) tmp = t_0; else tmp = 1.0; end return tmp end
function tmp_2 = code(alpha, beta) t_0 = (1.0 + (beta * 0.5)) / 2.0; tmp = 0.0; if (beta <= 1.46e-206) tmp = t_0; elseif (beta <= 4e-175) tmp = (2.0 / alpha) / 2.0; elseif (beta <= 2.0) tmp = t_0; else tmp = 1.0; end tmp_2 = tmp; end
code[alpha_, beta_] := Block[{t$95$0 = N[(N[(1.0 + N[(beta * 0.5), $MachinePrecision]), $MachinePrecision] / 2.0), $MachinePrecision]}, If[LessEqual[beta, 1.46e-206], t$95$0, If[LessEqual[beta, 4e-175], N[(N[(2.0 / alpha), $MachinePrecision] / 2.0), $MachinePrecision], If[LessEqual[beta, 2.0], t$95$0, 1.0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{1 + \beta \cdot 0.5}{2}\\
\mathbf{if}\;\beta \leq 1.46 \cdot 10^{-206}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;\beta \leq 4 \cdot 10^{-175}:\\
\;\;\;\;\frac{\frac{2}{\alpha}}{2}\\
\mathbf{elif}\;\beta \leq 2:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;1\\
\end{array}
\end{array}
if beta < 1.46000000000000004e-206 or 4e-175 < beta < 2Initial program 70.1%
+-commutative70.1%
Simplified70.1%
Taylor expanded in alpha around 0 68.8%
+-commutative68.8%
+-commutative68.8%
Simplified68.8%
Taylor expanded in beta around 0 68.0%
if 1.46000000000000004e-206 < beta < 4e-175Initial program 25.7%
+-commutative25.7%
Simplified25.7%
Taylor expanded in beta around 0 25.7%
Taylor expanded in alpha around inf 80.7%
if 2 < beta Initial program 84.3%
+-commutative84.3%
sub-neg84.3%
+-commutative84.3%
neg-sub084.3%
associate-+l-84.3%
sub0-neg84.3%
distribute-frac-neg84.3%
+-commutative84.3%
sub-neg84.3%
div-sub84.3%
sub-neg84.3%
metadata-eval84.3%
neg-mul-184.3%
*-commutative84.3%
+-commutative84.3%
associate-/l/84.3%
associate-*l/84.3%
Simplified84.4%
Taylor expanded in beta around inf 81.6%
Final simplification73.5%
(FPCore (alpha beta)
:precision binary64
(let* ((t_0 (/ (+ 1.0 (* beta 0.5)) 2.0)))
(if (<= beta 1.85e-206)
t_0
(if (<= beta 1.35e-174)
(/ (/ 2.0 alpha) 2.0)
(if (<= beta 2.0) t_0 (/ (- 2.0 (/ 2.0 beta)) 2.0))))))
double code(double alpha, double beta) {
double t_0 = (1.0 + (beta * 0.5)) / 2.0;
double tmp;
if (beta <= 1.85e-206) {
tmp = t_0;
} else if (beta <= 1.35e-174) {
tmp = (2.0 / alpha) / 2.0;
} else if (beta <= 2.0) {
tmp = t_0;
} else {
tmp = (2.0 - (2.0 / beta)) / 2.0;
}
return tmp;
}
real(8) function code(alpha, beta)
real(8), intent (in) :: alpha
real(8), intent (in) :: beta
real(8) :: t_0
real(8) :: tmp
t_0 = (1.0d0 + (beta * 0.5d0)) / 2.0d0
if (beta <= 1.85d-206) then
tmp = t_0
else if (beta <= 1.35d-174) then
tmp = (2.0d0 / alpha) / 2.0d0
else if (beta <= 2.0d0) then
tmp = t_0
else
tmp = (2.0d0 - (2.0d0 / beta)) / 2.0d0
end if
code = tmp
end function
public static double code(double alpha, double beta) {
double t_0 = (1.0 + (beta * 0.5)) / 2.0;
double tmp;
if (beta <= 1.85e-206) {
tmp = t_0;
} else if (beta <= 1.35e-174) {
tmp = (2.0 / alpha) / 2.0;
} else if (beta <= 2.0) {
tmp = t_0;
} else {
tmp = (2.0 - (2.0 / beta)) / 2.0;
}
return tmp;
}
def code(alpha, beta): t_0 = (1.0 + (beta * 0.5)) / 2.0 tmp = 0 if beta <= 1.85e-206: tmp = t_0 elif beta <= 1.35e-174: tmp = (2.0 / alpha) / 2.0 elif beta <= 2.0: tmp = t_0 else: tmp = (2.0 - (2.0 / beta)) / 2.0 return tmp
function code(alpha, beta) t_0 = Float64(Float64(1.0 + Float64(beta * 0.5)) / 2.0) tmp = 0.0 if (beta <= 1.85e-206) tmp = t_0; elseif (beta <= 1.35e-174) tmp = Float64(Float64(2.0 / alpha) / 2.0); elseif (beta <= 2.0) tmp = t_0; else tmp = Float64(Float64(2.0 - Float64(2.0 / beta)) / 2.0); end return tmp end
function tmp_2 = code(alpha, beta) t_0 = (1.0 + (beta * 0.5)) / 2.0; tmp = 0.0; if (beta <= 1.85e-206) tmp = t_0; elseif (beta <= 1.35e-174) tmp = (2.0 / alpha) / 2.0; elseif (beta <= 2.0) tmp = t_0; else tmp = (2.0 - (2.0 / beta)) / 2.0; end tmp_2 = tmp; end
code[alpha_, beta_] := Block[{t$95$0 = N[(N[(1.0 + N[(beta * 0.5), $MachinePrecision]), $MachinePrecision] / 2.0), $MachinePrecision]}, If[LessEqual[beta, 1.85e-206], t$95$0, If[LessEqual[beta, 1.35e-174], N[(N[(2.0 / alpha), $MachinePrecision] / 2.0), $MachinePrecision], If[LessEqual[beta, 2.0], t$95$0, N[(N[(2.0 - N[(2.0 / beta), $MachinePrecision]), $MachinePrecision] / 2.0), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{1 + \beta \cdot 0.5}{2}\\
\mathbf{if}\;\beta \leq 1.85 \cdot 10^{-206}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;\beta \leq 1.35 \cdot 10^{-174}:\\
\;\;\;\;\frac{\frac{2}{\alpha}}{2}\\
\mathbf{elif}\;\beta \leq 2:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{2 - \frac{2}{\beta}}{2}\\
\end{array}
\end{array}
if beta < 1.84999999999999999e-206 or 1.34999999999999994e-174 < beta < 2Initial program 70.1%
+-commutative70.1%
Simplified70.1%
Taylor expanded in alpha around 0 68.8%
+-commutative68.8%
+-commutative68.8%
Simplified68.8%
Taylor expanded in beta around 0 68.0%
if 1.84999999999999999e-206 < beta < 1.34999999999999994e-174Initial program 25.7%
+-commutative25.7%
Simplified25.7%
Taylor expanded in beta around 0 25.7%
Taylor expanded in alpha around inf 80.7%
if 2 < beta Initial program 84.3%
+-commutative84.3%
Simplified84.3%
Taylor expanded in alpha around 0 82.6%
+-commutative82.6%
+-commutative82.6%
Simplified82.6%
Taylor expanded in beta around inf 82.1%
associate-*r/82.1%
metadata-eval82.1%
Simplified82.1%
Final simplification73.6%
(FPCore (alpha beta)
:precision binary64
(let* ((t_0 (+ 0.5 (* alpha -0.25))))
(if (<= beta 6.5e-207)
t_0
(if (<= beta 4.2e-175)
(/ (/ 2.0 alpha) 2.0)
(if (<= beta 0.95) t_0 1.0)))))
double code(double alpha, double beta) {
double t_0 = 0.5 + (alpha * -0.25);
double tmp;
if (beta <= 6.5e-207) {
tmp = t_0;
} else if (beta <= 4.2e-175) {
tmp = (2.0 / alpha) / 2.0;
} else if (beta <= 0.95) {
tmp = t_0;
} else {
tmp = 1.0;
}
return tmp;
}
real(8) function code(alpha, beta)
real(8), intent (in) :: alpha
real(8), intent (in) :: beta
real(8) :: t_0
real(8) :: tmp
t_0 = 0.5d0 + (alpha * (-0.25d0))
if (beta <= 6.5d-207) then
tmp = t_0
else if (beta <= 4.2d-175) then
tmp = (2.0d0 / alpha) / 2.0d0
else if (beta <= 0.95d0) then
tmp = t_0
else
tmp = 1.0d0
end if
code = tmp
end function
public static double code(double alpha, double beta) {
double t_0 = 0.5 + (alpha * -0.25);
double tmp;
if (beta <= 6.5e-207) {
tmp = t_0;
} else if (beta <= 4.2e-175) {
tmp = (2.0 / alpha) / 2.0;
} else if (beta <= 0.95) {
tmp = t_0;
} else {
tmp = 1.0;
}
return tmp;
}
def code(alpha, beta): t_0 = 0.5 + (alpha * -0.25) tmp = 0 if beta <= 6.5e-207: tmp = t_0 elif beta <= 4.2e-175: tmp = (2.0 / alpha) / 2.0 elif beta <= 0.95: tmp = t_0 else: tmp = 1.0 return tmp
function code(alpha, beta) t_0 = Float64(0.5 + Float64(alpha * -0.25)) tmp = 0.0 if (beta <= 6.5e-207) tmp = t_0; elseif (beta <= 4.2e-175) tmp = Float64(Float64(2.0 / alpha) / 2.0); elseif (beta <= 0.95) tmp = t_0; else tmp = 1.0; end return tmp end
function tmp_2 = code(alpha, beta) t_0 = 0.5 + (alpha * -0.25); tmp = 0.0; if (beta <= 6.5e-207) tmp = t_0; elseif (beta <= 4.2e-175) tmp = (2.0 / alpha) / 2.0; elseif (beta <= 0.95) tmp = t_0; else tmp = 1.0; end tmp_2 = tmp; end
code[alpha_, beta_] := Block[{t$95$0 = N[(0.5 + N[(alpha * -0.25), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[beta, 6.5e-207], t$95$0, If[LessEqual[beta, 4.2e-175], N[(N[(2.0 / alpha), $MachinePrecision] / 2.0), $MachinePrecision], If[LessEqual[beta, 0.95], t$95$0, 1.0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 + \alpha \cdot -0.25\\
\mathbf{if}\;\beta \leq 6.5 \cdot 10^{-207}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;\beta \leq 4.2 \cdot 10^{-175}:\\
\;\;\;\;\frac{\frac{2}{\alpha}}{2}\\
\mathbf{elif}\;\beta \leq 0.95:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;1\\
\end{array}
\end{array}
if beta < 6.5000000000000001e-207 or 4.2e-175 < beta < 0.94999999999999996Initial program 70.1%
+-commutative70.1%
sub-neg70.1%
+-commutative70.1%
neg-sub070.1%
associate-+l-70.1%
sub0-neg70.1%
distribute-frac-neg70.1%
+-commutative70.1%
sub-neg70.1%
div-sub70.1%
sub-neg70.1%
metadata-eval70.1%
neg-mul-170.1%
*-commutative70.1%
+-commutative70.1%
associate-/l/70.1%
associate-*l/70.1%
Simplified70.0%
Taylor expanded in alpha around 0 67.8%
+-commutative67.8%
Simplified67.8%
Taylor expanded in beta around 0 66.8%
*-commutative66.8%
Simplified66.8%
if 6.5000000000000001e-207 < beta < 4.2e-175Initial program 25.7%
+-commutative25.7%
Simplified25.7%
Taylor expanded in beta around 0 25.7%
Taylor expanded in alpha around inf 80.7%
if 0.94999999999999996 < beta Initial program 84.3%
+-commutative84.3%
sub-neg84.3%
+-commutative84.3%
neg-sub084.3%
associate-+l-84.3%
sub0-neg84.3%
distribute-frac-neg84.3%
+-commutative84.3%
sub-neg84.3%
div-sub84.3%
sub-neg84.3%
metadata-eval84.3%
neg-mul-184.3%
*-commutative84.3%
+-commutative84.3%
associate-/l/84.3%
associate-*l/84.3%
Simplified84.4%
Taylor expanded in beta around inf 81.6%
Final simplification72.7%
(FPCore (alpha beta) :precision binary64 (if (<= alpha 2.55e+14) (+ 0.5 (* (- alpha beta) (/ -0.5 (+ beta 2.0)))) (/ (/ (+ 2.0 (* beta 2.0)) alpha) 2.0)))
double code(double alpha, double beta) {
double tmp;
if (alpha <= 2.55e+14) {
tmp = 0.5 + ((alpha - beta) * (-0.5 / (beta + 2.0)));
} else {
tmp = ((2.0 + (beta * 2.0)) / alpha) / 2.0;
}
return tmp;
}
real(8) function code(alpha, beta)
real(8), intent (in) :: alpha
real(8), intent (in) :: beta
real(8) :: tmp
if (alpha <= 2.55d+14) then
tmp = 0.5d0 + ((alpha - beta) * ((-0.5d0) / (beta + 2.0d0)))
else
tmp = ((2.0d0 + (beta * 2.0d0)) / alpha) / 2.0d0
end if
code = tmp
end function
public static double code(double alpha, double beta) {
double tmp;
if (alpha <= 2.55e+14) {
tmp = 0.5 + ((alpha - beta) * (-0.5 / (beta + 2.0)));
} else {
tmp = ((2.0 + (beta * 2.0)) / alpha) / 2.0;
}
return tmp;
}
def code(alpha, beta): tmp = 0 if alpha <= 2.55e+14: tmp = 0.5 + ((alpha - beta) * (-0.5 / (beta + 2.0))) else: tmp = ((2.0 + (beta * 2.0)) / alpha) / 2.0 return tmp
function code(alpha, beta) tmp = 0.0 if (alpha <= 2.55e+14) tmp = Float64(0.5 + Float64(Float64(alpha - beta) * Float64(-0.5 / Float64(beta + 2.0)))); else tmp = Float64(Float64(Float64(2.0 + Float64(beta * 2.0)) / alpha) / 2.0); end return tmp end
function tmp_2 = code(alpha, beta) tmp = 0.0; if (alpha <= 2.55e+14) tmp = 0.5 + ((alpha - beta) * (-0.5 / (beta + 2.0))); else tmp = ((2.0 + (beta * 2.0)) / alpha) / 2.0; end tmp_2 = tmp; end
code[alpha_, beta_] := If[LessEqual[alpha, 2.55e+14], N[(0.5 + N[(N[(alpha - beta), $MachinePrecision] * N[(-0.5 / N[(beta + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(N[(2.0 + N[(beta * 2.0), $MachinePrecision]), $MachinePrecision] / alpha), $MachinePrecision] / 2.0), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\alpha \leq 2.55 \cdot 10^{+14}:\\
\;\;\;\;0.5 + \left(\alpha - \beta\right) \cdot \frac{-0.5}{\beta + 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{2 + \beta \cdot 2}{\alpha}}{2}\\
\end{array}
\end{array}
if alpha < 2.55e14Initial program 99.8%
+-commutative99.8%
sub-neg99.8%
+-commutative99.8%
neg-sub099.8%
associate-+l-99.8%
sub0-neg99.8%
distribute-frac-neg99.8%
+-commutative99.8%
sub-neg99.8%
div-sub99.8%
sub-neg99.8%
metadata-eval99.8%
neg-mul-199.8%
*-commutative99.8%
+-commutative99.8%
associate-/l/99.8%
associate-*l/99.8%
Simplified99.8%
Taylor expanded in alpha around 0 98.8%
+-commutative98.8%
Simplified98.8%
if 2.55e14 < alpha Initial program 26.6%
+-commutative26.6%
Simplified26.6%
Taylor expanded in alpha around inf 79.2%
*-commutative79.2%
Simplified79.2%
Final simplification91.8%
(FPCore (alpha beta) :precision binary64 (if (<= alpha 2.6e+14) (/ (+ (/ beta (+ beta 2.0)) 1.0) 2.0) (/ (/ 2.0 alpha) 2.0)))
double code(double alpha, double beta) {
double tmp;
if (alpha <= 2.6e+14) {
tmp = ((beta / (beta + 2.0)) + 1.0) / 2.0;
} else {
tmp = (2.0 / alpha) / 2.0;
}
return tmp;
}
real(8) function code(alpha, beta)
real(8), intent (in) :: alpha
real(8), intent (in) :: beta
real(8) :: tmp
if (alpha <= 2.6d+14) then
tmp = ((beta / (beta + 2.0d0)) + 1.0d0) / 2.0d0
else
tmp = (2.0d0 / alpha) / 2.0d0
end if
code = tmp
end function
public static double code(double alpha, double beta) {
double tmp;
if (alpha <= 2.6e+14) {
tmp = ((beta / (beta + 2.0)) + 1.0) / 2.0;
} else {
tmp = (2.0 / alpha) / 2.0;
}
return tmp;
}
def code(alpha, beta): tmp = 0 if alpha <= 2.6e+14: tmp = ((beta / (beta + 2.0)) + 1.0) / 2.0 else: tmp = (2.0 / alpha) / 2.0 return tmp
function code(alpha, beta) tmp = 0.0 if (alpha <= 2.6e+14) tmp = Float64(Float64(Float64(beta / Float64(beta + 2.0)) + 1.0) / 2.0); else tmp = Float64(Float64(2.0 / alpha) / 2.0); end return tmp end
function tmp_2 = code(alpha, beta) tmp = 0.0; if (alpha <= 2.6e+14) tmp = ((beta / (beta + 2.0)) + 1.0) / 2.0; else tmp = (2.0 / alpha) / 2.0; end tmp_2 = tmp; end
code[alpha_, beta_] := If[LessEqual[alpha, 2.6e+14], N[(N[(N[(beta / N[(beta + 2.0), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision] / 2.0), $MachinePrecision], N[(N[(2.0 / alpha), $MachinePrecision] / 2.0), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\alpha \leq 2.6 \cdot 10^{+14}:\\
\;\;\;\;\frac{\frac{\beta}{\beta + 2} + 1}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{2}{\alpha}}{2}\\
\end{array}
\end{array}
if alpha < 2.6e14Initial program 99.8%
+-commutative99.8%
Simplified99.8%
Taylor expanded in alpha around 0 98.6%
+-commutative98.6%
+-commutative98.6%
Simplified98.6%
if 2.6e14 < alpha Initial program 26.6%
+-commutative26.6%
Simplified26.6%
Taylor expanded in beta around 0 4.7%
Taylor expanded in alpha around inf 62.6%
Final simplification85.7%
(FPCore (alpha beta) :precision binary64 (if (<= alpha 2.55e+14) (/ (+ (/ beta (+ beta 2.0)) 1.0) 2.0) (/ (/ (+ 2.0 (* beta 2.0)) alpha) 2.0)))
double code(double alpha, double beta) {
double tmp;
if (alpha <= 2.55e+14) {
tmp = ((beta / (beta + 2.0)) + 1.0) / 2.0;
} else {
tmp = ((2.0 + (beta * 2.0)) / alpha) / 2.0;
}
return tmp;
}
real(8) function code(alpha, beta)
real(8), intent (in) :: alpha
real(8), intent (in) :: beta
real(8) :: tmp
if (alpha <= 2.55d+14) then
tmp = ((beta / (beta + 2.0d0)) + 1.0d0) / 2.0d0
else
tmp = ((2.0d0 + (beta * 2.0d0)) / alpha) / 2.0d0
end if
code = tmp
end function
public static double code(double alpha, double beta) {
double tmp;
if (alpha <= 2.55e+14) {
tmp = ((beta / (beta + 2.0)) + 1.0) / 2.0;
} else {
tmp = ((2.0 + (beta * 2.0)) / alpha) / 2.0;
}
return tmp;
}
def code(alpha, beta): tmp = 0 if alpha <= 2.55e+14: tmp = ((beta / (beta + 2.0)) + 1.0) / 2.0 else: tmp = ((2.0 + (beta * 2.0)) / alpha) / 2.0 return tmp
function code(alpha, beta) tmp = 0.0 if (alpha <= 2.55e+14) tmp = Float64(Float64(Float64(beta / Float64(beta + 2.0)) + 1.0) / 2.0); else tmp = Float64(Float64(Float64(2.0 + Float64(beta * 2.0)) / alpha) / 2.0); end return tmp end
function tmp_2 = code(alpha, beta) tmp = 0.0; if (alpha <= 2.55e+14) tmp = ((beta / (beta + 2.0)) + 1.0) / 2.0; else tmp = ((2.0 + (beta * 2.0)) / alpha) / 2.0; end tmp_2 = tmp; end
code[alpha_, beta_] := If[LessEqual[alpha, 2.55e+14], N[(N[(N[(beta / N[(beta + 2.0), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision] / 2.0), $MachinePrecision], N[(N[(N[(2.0 + N[(beta * 2.0), $MachinePrecision]), $MachinePrecision] / alpha), $MachinePrecision] / 2.0), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\alpha \leq 2.55 \cdot 10^{+14}:\\
\;\;\;\;\frac{\frac{\beta}{\beta + 2} + 1}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{2 + \beta \cdot 2}{\alpha}}{2}\\
\end{array}
\end{array}
if alpha < 2.55e14Initial program 99.8%
+-commutative99.8%
Simplified99.8%
Taylor expanded in alpha around 0 98.6%
+-commutative98.6%
+-commutative98.6%
Simplified98.6%
if 2.55e14 < alpha Initial program 26.6%
+-commutative26.6%
Simplified26.6%
Taylor expanded in alpha around inf 79.2%
*-commutative79.2%
Simplified79.2%
Final simplification91.6%
(FPCore (alpha beta) :precision binary64 (if (<= beta 0.65) (+ 0.5 (* alpha -0.25)) 1.0))
double code(double alpha, double beta) {
double tmp;
if (beta <= 0.65) {
tmp = 0.5 + (alpha * -0.25);
} else {
tmp = 1.0;
}
return tmp;
}
real(8) function code(alpha, beta)
real(8), intent (in) :: alpha
real(8), intent (in) :: beta
real(8) :: tmp
if (beta <= 0.65d0) then
tmp = 0.5d0 + (alpha * (-0.25d0))
else
tmp = 1.0d0
end if
code = tmp
end function
public static double code(double alpha, double beta) {
double tmp;
if (beta <= 0.65) {
tmp = 0.5 + (alpha * -0.25);
} else {
tmp = 1.0;
}
return tmp;
}
def code(alpha, beta): tmp = 0 if beta <= 0.65: tmp = 0.5 + (alpha * -0.25) else: tmp = 1.0 return tmp
function code(alpha, beta) tmp = 0.0 if (beta <= 0.65) tmp = Float64(0.5 + Float64(alpha * -0.25)); else tmp = 1.0; end return tmp end
function tmp_2 = code(alpha, beta) tmp = 0.0; if (beta <= 0.65) tmp = 0.5 + (alpha * -0.25); else tmp = 1.0; end tmp_2 = tmp; end
code[alpha_, beta_] := If[LessEqual[beta, 0.65], N[(0.5 + N[(alpha * -0.25), $MachinePrecision]), $MachinePrecision], 1.0]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\beta \leq 0.65:\\
\;\;\;\;0.5 + \alpha \cdot -0.25\\
\mathbf{else}:\\
\;\;\;\;1\\
\end{array}
\end{array}
if beta < 0.650000000000000022Initial program 67.3%
+-commutative67.3%
sub-neg67.3%
+-commutative67.3%
neg-sub067.3%
associate-+l-67.3%
sub0-neg67.3%
distribute-frac-neg67.3%
+-commutative67.3%
sub-neg67.3%
div-sub67.3%
sub-neg67.3%
metadata-eval67.3%
neg-mul-167.3%
*-commutative67.3%
+-commutative67.3%
associate-/l/67.3%
associate-*l/67.3%
Simplified67.2%
Taylor expanded in alpha around 0 65.0%
+-commutative65.0%
Simplified65.0%
Taylor expanded in beta around 0 64.0%
*-commutative64.0%
Simplified64.0%
if 0.650000000000000022 < beta Initial program 84.3%
+-commutative84.3%
sub-neg84.3%
+-commutative84.3%
neg-sub084.3%
associate-+l-84.3%
sub0-neg84.3%
distribute-frac-neg84.3%
+-commutative84.3%
sub-neg84.3%
div-sub84.3%
sub-neg84.3%
metadata-eval84.3%
neg-mul-184.3%
*-commutative84.3%
+-commutative84.3%
associate-/l/84.3%
associate-*l/84.3%
Simplified84.4%
Taylor expanded in beta around inf 81.6%
Final simplification70.4%
(FPCore (alpha beta) :precision binary64 1.0)
double code(double alpha, double beta) {
return 1.0;
}
real(8) function code(alpha, beta)
real(8), intent (in) :: alpha
real(8), intent (in) :: beta
code = 1.0d0
end function
public static double code(double alpha, double beta) {
return 1.0;
}
def code(alpha, beta): return 1.0
function code(alpha, beta) return 1.0 end
function tmp = code(alpha, beta) tmp = 1.0; end
code[alpha_, beta_] := 1.0
\begin{array}{l}
\\
1
\end{array}
Initial program 73.5%
+-commutative73.5%
sub-neg73.5%
+-commutative73.5%
neg-sub073.5%
associate-+l-73.5%
sub0-neg73.5%
distribute-frac-neg73.5%
+-commutative73.5%
sub-neg73.5%
div-sub73.5%
sub-neg73.5%
metadata-eval73.5%
neg-mul-173.5%
*-commutative73.5%
+-commutative73.5%
associate-/l/73.5%
associate-*l/73.5%
Simplified73.5%
Taylor expanded in beta around inf 38.5%
Final simplification38.5%
herbie shell --seed 2024100
(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))