
(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 16 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) (+ 2.0 (+ beta alpha))) -0.9995)
(/
(+ 1.0 (fma beta (fma (/ -1.0 alpha) (+ beta 3.0) 1.0) (/ -2.0 alpha)))
alpha)
(fma (/ (- beta alpha) (+ beta (+ alpha 2.0))) 0.5 0.5)))
double code(double alpha, double beta) {
double tmp;
if (((beta - alpha) / (2.0 + (beta + alpha))) <= -0.9995) {
tmp = (1.0 + fma(beta, fma((-1.0 / alpha), (beta + 3.0), 1.0), (-2.0 / alpha))) / alpha;
} else {
tmp = fma(((beta - alpha) / (beta + (alpha + 2.0))), 0.5, 0.5);
}
return tmp;
}
function code(alpha, beta) tmp = 0.0 if (Float64(Float64(beta - alpha) / Float64(2.0 + Float64(beta + alpha))) <= -0.9995) tmp = Float64(Float64(1.0 + fma(beta, fma(Float64(-1.0 / alpha), Float64(beta + 3.0), 1.0), Float64(-2.0 / alpha))) / alpha); else tmp = fma(Float64(Float64(beta - alpha) / Float64(beta + Float64(alpha + 2.0))), 0.5, 0.5); end return tmp end
code[alpha_, beta_] := If[LessEqual[N[(N[(beta - alpha), $MachinePrecision] / N[(2.0 + N[(beta + alpha), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], -0.9995], N[(N[(1.0 + N[(beta * N[(N[(-1.0 / alpha), $MachinePrecision] * N[(beta + 3.0), $MachinePrecision] + 1.0), $MachinePrecision] + N[(-2.0 / alpha), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / alpha), $MachinePrecision], N[(N[(N[(beta - alpha), $MachinePrecision] / N[(beta + N[(alpha + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * 0.5 + 0.5), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\frac{\beta - \alpha}{2 + \left(\beta + \alpha\right)} \leq -0.9995:\\
\;\;\;\;\frac{1 + \mathsf{fma}\left(\beta, \mathsf{fma}\left(\frac{-1}{\alpha}, \beta + 3, 1\right), \frac{-2}{\alpha}\right)}{\alpha}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\beta - \alpha}{\beta + \left(\alpha + 2\right)}, 0.5, 0.5\right)\\
\end{array}
\end{array}
if (/.f64 (-.f64 beta alpha) (+.f64 (+.f64 alpha beta) #s(literal 2 binary64))) < -0.99950000000000006Initial program 6.5%
Taylor expanded in alpha around inf
/-lowering-/.f64N/A
Simplified99.9%
Taylor expanded in beta around 0
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
accelerator-lowering-fma.f64N/A
Simplified100.0%
if -0.99950000000000006 < (/.f64 (-.f64 beta alpha) (+.f64 (+.f64 alpha beta) #s(literal 2 binary64))) Initial program 99.9%
clear-numN/A
associate-/r/N/A
distribute-rgt-inN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
--lowering--.f64N/A
+-commutativeN/A
associate-+l+N/A
+-lowering-+.f64N/A
+-lowering-+.f64N/A
metadata-evalN/A
metadata-eval99.9
Applied egg-rr99.9%
Final simplification99.9%
(FPCore (alpha beta)
:precision binary64
(if (<= (/ (- beta alpha) (+ 2.0 (+ beta alpha))) -0.9995)
(/
(fma 0.5 (* (+ beta 2.0) (/ (fma beta -2.0 -2.0) alpha)) (+ beta 1.0))
alpha)
(fma (/ (- beta alpha) (+ beta (+ alpha 2.0))) 0.5 0.5)))
double code(double alpha, double beta) {
double tmp;
if (((beta - alpha) / (2.0 + (beta + alpha))) <= -0.9995) {
tmp = fma(0.5, ((beta + 2.0) * (fma(beta, -2.0, -2.0) / alpha)), (beta + 1.0)) / alpha;
} else {
tmp = fma(((beta - alpha) / (beta + (alpha + 2.0))), 0.5, 0.5);
}
return tmp;
}
function code(alpha, beta) tmp = 0.0 if (Float64(Float64(beta - alpha) / Float64(2.0 + Float64(beta + alpha))) <= -0.9995) tmp = Float64(fma(0.5, Float64(Float64(beta + 2.0) * Float64(fma(beta, -2.0, -2.0) / alpha)), Float64(beta + 1.0)) / alpha); else tmp = fma(Float64(Float64(beta - alpha) / Float64(beta + Float64(alpha + 2.0))), 0.5, 0.5); end return tmp end
code[alpha_, beta_] := If[LessEqual[N[(N[(beta - alpha), $MachinePrecision] / N[(2.0 + N[(beta + alpha), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], -0.9995], N[(N[(0.5 * N[(N[(beta + 2.0), $MachinePrecision] * N[(N[(beta * -2.0 + -2.0), $MachinePrecision] / alpha), $MachinePrecision]), $MachinePrecision] + N[(beta + 1.0), $MachinePrecision]), $MachinePrecision] / alpha), $MachinePrecision], N[(N[(N[(beta - alpha), $MachinePrecision] / N[(beta + N[(alpha + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * 0.5 + 0.5), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\frac{\beta - \alpha}{2 + \left(\beta + \alpha\right)} \leq -0.9995:\\
\;\;\;\;\frac{\mathsf{fma}\left(0.5, \left(\beta + 2\right) \cdot \frac{\mathsf{fma}\left(\beta, -2, -2\right)}{\alpha}, \beta + 1\right)}{\alpha}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\beta - \alpha}{\beta + \left(\alpha + 2\right)}, 0.5, 0.5\right)\\
\end{array}
\end{array}
if (/.f64 (-.f64 beta alpha) (+.f64 (+.f64 alpha beta) #s(literal 2 binary64))) < -0.99950000000000006Initial program 6.5%
Taylor expanded in alpha around inf
/-lowering-/.f64N/A
Simplified99.9%
if -0.99950000000000006 < (/.f64 (-.f64 beta alpha) (+.f64 (+.f64 alpha beta) #s(literal 2 binary64))) Initial program 99.9%
clear-numN/A
associate-/r/N/A
distribute-rgt-inN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
--lowering--.f64N/A
+-commutativeN/A
associate-+l+N/A
+-lowering-+.f64N/A
+-lowering-+.f64N/A
metadata-evalN/A
metadata-eval99.9
Applied egg-rr99.9%
Final simplification99.9%
(FPCore (alpha beta) :precision binary64 (if (<= (/ (- beta alpha) (+ 2.0 (+ beta alpha))) -0.9995) (/ (fma 0.5 (* beta (/ (fma beta -2.0 -2.0) alpha)) (+ beta 1.0)) alpha) (fma (/ (- beta alpha) (+ beta (+ alpha 2.0))) 0.5 0.5)))
double code(double alpha, double beta) {
double tmp;
if (((beta - alpha) / (2.0 + (beta + alpha))) <= -0.9995) {
tmp = fma(0.5, (beta * (fma(beta, -2.0, -2.0) / alpha)), (beta + 1.0)) / alpha;
} else {
tmp = fma(((beta - alpha) / (beta + (alpha + 2.0))), 0.5, 0.5);
}
return tmp;
}
function code(alpha, beta) tmp = 0.0 if (Float64(Float64(beta - alpha) / Float64(2.0 + Float64(beta + alpha))) <= -0.9995) tmp = Float64(fma(0.5, Float64(beta * Float64(fma(beta, -2.0, -2.0) / alpha)), Float64(beta + 1.0)) / alpha); else tmp = fma(Float64(Float64(beta - alpha) / Float64(beta + Float64(alpha + 2.0))), 0.5, 0.5); end return tmp end
code[alpha_, beta_] := If[LessEqual[N[(N[(beta - alpha), $MachinePrecision] / N[(2.0 + N[(beta + alpha), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], -0.9995], N[(N[(0.5 * N[(beta * N[(N[(beta * -2.0 + -2.0), $MachinePrecision] / alpha), $MachinePrecision]), $MachinePrecision] + N[(beta + 1.0), $MachinePrecision]), $MachinePrecision] / alpha), $MachinePrecision], N[(N[(N[(beta - alpha), $MachinePrecision] / N[(beta + N[(alpha + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * 0.5 + 0.5), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\frac{\beta - \alpha}{2 + \left(\beta + \alpha\right)} \leq -0.9995:\\
\;\;\;\;\frac{\mathsf{fma}\left(0.5, \beta \cdot \frac{\mathsf{fma}\left(\beta, -2, -2\right)}{\alpha}, \beta + 1\right)}{\alpha}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\beta - \alpha}{\beta + \left(\alpha + 2\right)}, 0.5, 0.5\right)\\
\end{array}
\end{array}
if (/.f64 (-.f64 beta alpha) (+.f64 (+.f64 alpha beta) #s(literal 2 binary64))) < -0.99950000000000006Initial program 6.5%
Taylor expanded in alpha around inf
/-lowering-/.f64N/A
Simplified99.9%
Taylor expanded in beta around inf
Simplified99.5%
if -0.99950000000000006 < (/.f64 (-.f64 beta alpha) (+.f64 (+.f64 alpha beta) #s(literal 2 binary64))) Initial program 99.9%
clear-numN/A
associate-/r/N/A
distribute-rgt-inN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
--lowering--.f64N/A
+-commutativeN/A
associate-+l+N/A
+-lowering-+.f64N/A
+-lowering-+.f64N/A
metadata-evalN/A
metadata-eval99.9
Applied egg-rr99.9%
Final simplification99.8%
(FPCore (alpha beta) :precision binary64 (if (<= (/ (- beta alpha) (+ 2.0 (+ beta alpha))) -0.9995) (/ (fma 0.5 (/ -4.0 alpha) (+ beta 1.0)) alpha) (fma (/ (- beta alpha) (+ beta (+ alpha 2.0))) 0.5 0.5)))
double code(double alpha, double beta) {
double tmp;
if (((beta - alpha) / (2.0 + (beta + alpha))) <= -0.9995) {
tmp = fma(0.5, (-4.0 / alpha), (beta + 1.0)) / alpha;
} else {
tmp = fma(((beta - alpha) / (beta + (alpha + 2.0))), 0.5, 0.5);
}
return tmp;
}
function code(alpha, beta) tmp = 0.0 if (Float64(Float64(beta - alpha) / Float64(2.0 + Float64(beta + alpha))) <= -0.9995) tmp = Float64(fma(0.5, Float64(-4.0 / alpha), Float64(beta + 1.0)) / alpha); else tmp = fma(Float64(Float64(beta - alpha) / Float64(beta + Float64(alpha + 2.0))), 0.5, 0.5); end return tmp end
code[alpha_, beta_] := If[LessEqual[N[(N[(beta - alpha), $MachinePrecision] / N[(2.0 + N[(beta + alpha), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], -0.9995], N[(N[(0.5 * N[(-4.0 / alpha), $MachinePrecision] + N[(beta + 1.0), $MachinePrecision]), $MachinePrecision] / alpha), $MachinePrecision], N[(N[(N[(beta - alpha), $MachinePrecision] / N[(beta + N[(alpha + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * 0.5 + 0.5), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\frac{\beta - \alpha}{2 + \left(\beta + \alpha\right)} \leq -0.9995:\\
\;\;\;\;\frac{\mathsf{fma}\left(0.5, \frac{-4}{\alpha}, \beta + 1\right)}{\alpha}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\beta - \alpha}{\beta + \left(\alpha + 2\right)}, 0.5, 0.5\right)\\
\end{array}
\end{array}
if (/.f64 (-.f64 beta alpha) (+.f64 (+.f64 alpha beta) #s(literal 2 binary64))) < -0.99950000000000006Initial program 6.5%
Taylor expanded in alpha around inf
/-lowering-/.f64N/A
Simplified99.9%
Taylor expanded in beta around 0
/-lowering-/.f6499.4
Simplified99.4%
if -0.99950000000000006 < (/.f64 (-.f64 beta alpha) (+.f64 (+.f64 alpha beta) #s(literal 2 binary64))) Initial program 99.9%
clear-numN/A
associate-/r/N/A
distribute-rgt-inN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
--lowering--.f64N/A
+-commutativeN/A
associate-+l+N/A
+-lowering-+.f64N/A
+-lowering-+.f64N/A
metadata-evalN/A
metadata-eval99.9
Applied egg-rr99.9%
Final simplification99.8%
(FPCore (alpha beta) :precision binary64 (if (<= alpha 6800000000.0) (fma (/ (- beta alpha) (+ beta (+ alpha 2.0))) 0.5 0.5) (/ (+ beta 1.0) alpha)))
double code(double alpha, double beta) {
double tmp;
if (alpha <= 6800000000.0) {
tmp = fma(((beta - alpha) / (beta + (alpha + 2.0))), 0.5, 0.5);
} else {
tmp = (beta + 1.0) / alpha;
}
return tmp;
}
function code(alpha, beta) tmp = 0.0 if (alpha <= 6800000000.0) tmp = fma(Float64(Float64(beta - alpha) / Float64(beta + Float64(alpha + 2.0))), 0.5, 0.5); else tmp = Float64(Float64(beta + 1.0) / alpha); end return tmp end
code[alpha_, beta_] := If[LessEqual[alpha, 6800000000.0], N[(N[(N[(beta - alpha), $MachinePrecision] / N[(beta + N[(alpha + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * 0.5 + 0.5), $MachinePrecision], N[(N[(beta + 1.0), $MachinePrecision] / alpha), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\alpha \leq 6800000000:\\
\;\;\;\;\mathsf{fma}\left(\frac{\beta - \alpha}{\beta + \left(\alpha + 2\right)}, 0.5, 0.5\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\beta + 1}{\alpha}\\
\end{array}
\end{array}
if alpha < 6.8e9Initial program 99.9%
clear-numN/A
associate-/r/N/A
distribute-rgt-inN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
--lowering--.f64N/A
+-commutativeN/A
associate-+l+N/A
+-lowering-+.f64N/A
+-lowering-+.f64N/A
metadata-evalN/A
metadata-eval99.9
Applied egg-rr99.9%
if 6.8e9 < alpha Initial program 18.6%
Taylor expanded in alpha around inf
associate-*r/N/A
/-lowering-/.f64N/A
distribute-lft-inN/A
metadata-evalN/A
associate-*r*N/A
metadata-evalN/A
*-lft-identityN/A
+-lowering-+.f6486.9
Simplified86.9%
Final simplification95.6%
(FPCore (alpha beta) :precision binary64 (if (<= alpha 8200000000.0) (fma (- beta alpha) (/ 0.5 (+ 2.0 (+ beta alpha))) 0.5) (/ (+ beta 1.0) alpha)))
double code(double alpha, double beta) {
double tmp;
if (alpha <= 8200000000.0) {
tmp = fma((beta - alpha), (0.5 / (2.0 + (beta + alpha))), 0.5);
} else {
tmp = (beta + 1.0) / alpha;
}
return tmp;
}
function code(alpha, beta) tmp = 0.0 if (alpha <= 8200000000.0) tmp = fma(Float64(beta - alpha), Float64(0.5 / Float64(2.0 + Float64(beta + alpha))), 0.5); else tmp = Float64(Float64(beta + 1.0) / alpha); end return tmp end
code[alpha_, beta_] := If[LessEqual[alpha, 8200000000.0], N[(N[(beta - alpha), $MachinePrecision] * N[(0.5 / N[(2.0 + N[(beta + alpha), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 0.5), $MachinePrecision], N[(N[(beta + 1.0), $MachinePrecision] / alpha), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\alpha \leq 8200000000:\\
\;\;\;\;\mathsf{fma}\left(\beta - \alpha, \frac{0.5}{2 + \left(\beta + \alpha\right)}, 0.5\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\beta + 1}{\alpha}\\
\end{array}
\end{array}
if alpha < 8.2e9Initial program 99.9%
clear-numN/A
associate-/r/N/A
distribute-rgt-inN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
--lowering--.f64N/A
+-commutativeN/A
associate-+l+N/A
+-lowering-+.f64N/A
+-lowering-+.f64N/A
metadata-evalN/A
metadata-eval99.9
Applied egg-rr99.9%
associate-*l/N/A
associate-/l*N/A
accelerator-lowering-fma.f64N/A
--lowering--.f64N/A
/-lowering-/.f64N/A
associate-+r+N/A
+-commutativeN/A
+-lowering-+.f64N/A
+-lowering-+.f6499.9
Applied egg-rr99.9%
if 8.2e9 < alpha Initial program 18.6%
Taylor expanded in alpha around inf
associate-*r/N/A
/-lowering-/.f64N/A
distribute-lft-inN/A
metadata-evalN/A
associate-*r*N/A
metadata-evalN/A
*-lft-identityN/A
+-lowering-+.f6486.9
Simplified86.9%
Final simplification95.6%
(FPCore (alpha beta) :precision binary64 (if (<= alpha 6.9) (fma (/ (- beta alpha) (+ beta 2.0)) 0.5 0.5) (/ (+ beta 1.0) alpha)))
double code(double alpha, double beta) {
double tmp;
if (alpha <= 6.9) {
tmp = fma(((beta - alpha) / (beta + 2.0)), 0.5, 0.5);
} else {
tmp = (beta + 1.0) / alpha;
}
return tmp;
}
function code(alpha, beta) tmp = 0.0 if (alpha <= 6.9) tmp = fma(Float64(Float64(beta - alpha) / Float64(beta + 2.0)), 0.5, 0.5); else tmp = Float64(Float64(beta + 1.0) / alpha); end return tmp end
code[alpha_, beta_] := If[LessEqual[alpha, 6.9], N[(N[(N[(beta - alpha), $MachinePrecision] / N[(beta + 2.0), $MachinePrecision]), $MachinePrecision] * 0.5 + 0.5), $MachinePrecision], N[(N[(beta + 1.0), $MachinePrecision] / alpha), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\alpha \leq 6.9:\\
\;\;\;\;\mathsf{fma}\left(\frac{\beta - \alpha}{\beta + 2}, 0.5, 0.5\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\beta + 1}{\alpha}\\
\end{array}
\end{array}
if alpha < 6.9000000000000004Initial program 100.0%
clear-numN/A
associate-/r/N/A
distribute-rgt-inN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
--lowering--.f64N/A
+-commutativeN/A
associate-+l+N/A
+-lowering-+.f64N/A
+-lowering-+.f64N/A
metadata-evalN/A
metadata-eval100.0
Applied egg-rr100.0%
Taylor expanded in alpha around 0
Simplified99.8%
if 6.9000000000000004 < alpha Initial program 20.4%
Taylor expanded in alpha around inf
associate-*r/N/A
/-lowering-/.f64N/A
distribute-lft-inN/A
metadata-evalN/A
associate-*r*N/A
metadata-evalN/A
*-lft-identityN/A
+-lowering-+.f6485.6
Simplified85.6%
Final simplification94.9%
(FPCore (alpha beta) :precision binary64 (if (<= alpha 14.5) (fma 0.5 (/ beta (+ beta 2.0)) 0.5) (/ (+ beta 1.0) alpha)))
double code(double alpha, double beta) {
double tmp;
if (alpha <= 14.5) {
tmp = fma(0.5, (beta / (beta + 2.0)), 0.5);
} else {
tmp = (beta + 1.0) / alpha;
}
return tmp;
}
function code(alpha, beta) tmp = 0.0 if (alpha <= 14.5) tmp = fma(0.5, Float64(beta / Float64(beta + 2.0)), 0.5); else tmp = Float64(Float64(beta + 1.0) / alpha); end return tmp end
code[alpha_, beta_] := If[LessEqual[alpha, 14.5], N[(0.5 * N[(beta / N[(beta + 2.0), $MachinePrecision]), $MachinePrecision] + 0.5), $MachinePrecision], N[(N[(beta + 1.0), $MachinePrecision] / alpha), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\alpha \leq 14.5:\\
\;\;\;\;\mathsf{fma}\left(0.5, \frac{\beta}{\beta + 2}, 0.5\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\beta + 1}{\alpha}\\
\end{array}
\end{array}
if alpha < 14.5Initial program 100.0%
Taylor expanded in alpha around 0
+-commutativeN/A
distribute-lft-inN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
+-lowering-+.f6499.5
Simplified99.5%
if 14.5 < alpha Initial program 20.4%
Taylor expanded in alpha around inf
associate-*r/N/A
/-lowering-/.f64N/A
distribute-lft-inN/A
metadata-evalN/A
associate-*r*N/A
metadata-evalN/A
*-lft-identityN/A
+-lowering-+.f6485.6
Simplified85.6%
Final simplification94.7%
(FPCore (alpha beta) :precision binary64 (if (<= alpha 600000000.0) (fma -0.5 (/ alpha (+ alpha 2.0)) 0.5) (/ (+ beta 1.0) alpha)))
double code(double alpha, double beta) {
double tmp;
if (alpha <= 600000000.0) {
tmp = fma(-0.5, (alpha / (alpha + 2.0)), 0.5);
} else {
tmp = (beta + 1.0) / alpha;
}
return tmp;
}
function code(alpha, beta) tmp = 0.0 if (alpha <= 600000000.0) tmp = fma(-0.5, Float64(alpha / Float64(alpha + 2.0)), 0.5); else tmp = Float64(Float64(beta + 1.0) / alpha); end return tmp end
code[alpha_, beta_] := If[LessEqual[alpha, 600000000.0], N[(-0.5 * N[(alpha / N[(alpha + 2.0), $MachinePrecision]), $MachinePrecision] + 0.5), $MachinePrecision], N[(N[(beta + 1.0), $MachinePrecision] / alpha), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\alpha \leq 600000000:\\
\;\;\;\;\mathsf{fma}\left(-0.5, \frac{\alpha}{\alpha + 2}, 0.5\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\beta + 1}{\alpha}\\
\end{array}
\end{array}
if alpha < 6e8Initial program 99.9%
clear-numN/A
associate-/r/N/A
distribute-rgt-inN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
--lowering--.f64N/A
+-commutativeN/A
associate-+l+N/A
+-lowering-+.f64N/A
+-lowering-+.f64N/A
metadata-evalN/A
metadata-eval99.9
Applied egg-rr99.9%
Taylor expanded in beta around 0
+-commutativeN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6470.0
Simplified70.0%
if 6e8 < alpha Initial program 18.6%
Taylor expanded in alpha around inf
associate-*r/N/A
/-lowering-/.f64N/A
distribute-lft-inN/A
metadata-evalN/A
associate-*r*N/A
metadata-evalN/A
*-lft-identityN/A
+-lowering-+.f6486.9
Simplified86.9%
Final simplification75.6%
(FPCore (alpha beta) :precision binary64 (if (<= alpha 1.9) (fma alpha (fma alpha (fma alpha -0.0625 0.125) -0.25) 0.5) (/ (+ beta 1.0) alpha)))
double code(double alpha, double beta) {
double tmp;
if (alpha <= 1.9) {
tmp = fma(alpha, fma(alpha, fma(alpha, -0.0625, 0.125), -0.25), 0.5);
} else {
tmp = (beta + 1.0) / alpha;
}
return tmp;
}
function code(alpha, beta) tmp = 0.0 if (alpha <= 1.9) tmp = fma(alpha, fma(alpha, fma(alpha, -0.0625, 0.125), -0.25), 0.5); else tmp = Float64(Float64(beta + 1.0) / alpha); end return tmp end
code[alpha_, beta_] := If[LessEqual[alpha, 1.9], N[(alpha * N[(alpha * N[(alpha * -0.0625 + 0.125), $MachinePrecision] + -0.25), $MachinePrecision] + 0.5), $MachinePrecision], N[(N[(beta + 1.0), $MachinePrecision] / alpha), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\alpha \leq 1.9:\\
\;\;\;\;\mathsf{fma}\left(\alpha, \mathsf{fma}\left(\alpha, \mathsf{fma}\left(\alpha, -0.0625, 0.125\right), -0.25\right), 0.5\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\beta + 1}{\alpha}\\
\end{array}
\end{array}
if alpha < 1.8999999999999999Initial program 100.0%
clear-numN/A
associate-/r/N/A
distribute-rgt-inN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
--lowering--.f64N/A
+-commutativeN/A
associate-+l+N/A
+-lowering-+.f64N/A
+-lowering-+.f64N/A
metadata-evalN/A
metadata-eval100.0
Applied egg-rr100.0%
Taylor expanded in beta around 0
+-commutativeN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6469.7
Simplified69.7%
Taylor expanded in alpha around 0
+-commutativeN/A
accelerator-lowering-fma.f64N/A
sub-negN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
accelerator-lowering-fma.f6469.7
Simplified69.7%
if 1.8999999999999999 < alpha Initial program 20.4%
Taylor expanded in alpha around inf
associate-*r/N/A
/-lowering-/.f64N/A
distribute-lft-inN/A
metadata-evalN/A
associate-*r*N/A
metadata-evalN/A
*-lft-identityN/A
+-lowering-+.f6485.6
Simplified85.6%
Final simplification75.1%
(FPCore (alpha beta) :precision binary64 (if (<= alpha 6.6) (fma alpha (fma alpha 0.125 -0.25) 0.5) (/ (+ beta 1.0) alpha)))
double code(double alpha, double beta) {
double tmp;
if (alpha <= 6.6) {
tmp = fma(alpha, fma(alpha, 0.125, -0.25), 0.5);
} else {
tmp = (beta + 1.0) / alpha;
}
return tmp;
}
function code(alpha, beta) tmp = 0.0 if (alpha <= 6.6) tmp = fma(alpha, fma(alpha, 0.125, -0.25), 0.5); else tmp = Float64(Float64(beta + 1.0) / alpha); end return tmp end
code[alpha_, beta_] := If[LessEqual[alpha, 6.6], N[(alpha * N[(alpha * 0.125 + -0.25), $MachinePrecision] + 0.5), $MachinePrecision], N[(N[(beta + 1.0), $MachinePrecision] / alpha), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\alpha \leq 6.6:\\
\;\;\;\;\mathsf{fma}\left(\alpha, \mathsf{fma}\left(\alpha, 0.125, -0.25\right), 0.5\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\beta + 1}{\alpha}\\
\end{array}
\end{array}
if alpha < 6.5999999999999996Initial program 100.0%
clear-numN/A
associate-/r/N/A
distribute-rgt-inN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
--lowering--.f64N/A
+-commutativeN/A
associate-+l+N/A
+-lowering-+.f64N/A
+-lowering-+.f64N/A
metadata-evalN/A
metadata-eval100.0
Applied egg-rr100.0%
Taylor expanded in beta around 0
+-commutativeN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6469.7
Simplified69.7%
Taylor expanded in alpha around 0
+-commutativeN/A
accelerator-lowering-fma.f64N/A
sub-negN/A
*-commutativeN/A
metadata-evalN/A
accelerator-lowering-fma.f6469.6
Simplified69.6%
if 6.5999999999999996 < alpha Initial program 20.4%
Taylor expanded in alpha around inf
associate-*r/N/A
/-lowering-/.f64N/A
distribute-lft-inN/A
metadata-evalN/A
associate-*r*N/A
metadata-evalN/A
*-lft-identityN/A
+-lowering-+.f6485.6
Simplified85.6%
Final simplification75.0%
(FPCore (alpha beta) :precision binary64 (if (<= beta 2.0) (fma beta (fma beta -0.125 0.25) 0.5) 1.0))
double code(double alpha, double beta) {
double tmp;
if (beta <= 2.0) {
tmp = fma(beta, fma(beta, -0.125, 0.25), 0.5);
} else {
tmp = 1.0;
}
return tmp;
}
function code(alpha, beta) tmp = 0.0 if (beta <= 2.0) tmp = fma(beta, fma(beta, -0.125, 0.25), 0.5); else tmp = 1.0; end return tmp end
code[alpha_, beta_] := If[LessEqual[beta, 2.0], N[(beta * N[(beta * -0.125 + 0.25), $MachinePrecision] + 0.5), $MachinePrecision], 1.0]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\beta \leq 2:\\
\;\;\;\;\mathsf{fma}\left(\beta, \mathsf{fma}\left(\beta, -0.125, 0.25\right), 0.5\right)\\
\mathbf{else}:\\
\;\;\;\;1\\
\end{array}
\end{array}
if beta < 2Initial program 66.8%
Taylor expanded in alpha around 0
+-commutativeN/A
distribute-lft-inN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
+-lowering-+.f6465.2
Simplified65.2%
Taylor expanded in beta around 0
+-commutativeN/A
accelerator-lowering-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
accelerator-lowering-fma.f6464.5
Simplified64.5%
if 2 < beta Initial program 85.7%
Taylor expanded in beta around inf
Simplified85.4%
(FPCore (alpha beta) :precision binary64 (if (<= beta 2.0) (fma beta 0.25 0.5) 1.0))
double code(double alpha, double beta) {
double tmp;
if (beta <= 2.0) {
tmp = fma(beta, 0.25, 0.5);
} else {
tmp = 1.0;
}
return tmp;
}
function code(alpha, beta) tmp = 0.0 if (beta <= 2.0) tmp = fma(beta, 0.25, 0.5); else tmp = 1.0; end return tmp end
code[alpha_, beta_] := If[LessEqual[beta, 2.0], N[(beta * 0.25 + 0.5), $MachinePrecision], 1.0]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\beta \leq 2:\\
\;\;\;\;\mathsf{fma}\left(\beta, 0.25, 0.5\right)\\
\mathbf{else}:\\
\;\;\;\;1\\
\end{array}
\end{array}
if beta < 2Initial program 66.8%
Taylor expanded in alpha around 0
+-commutativeN/A
distribute-lft-inN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
+-lowering-+.f6465.2
Simplified65.2%
Taylor expanded in beta around 0
+-commutativeN/A
*-commutativeN/A
accelerator-lowering-fma.f6464.1
Simplified64.1%
if 2 < beta Initial program 85.7%
Taylor expanded in beta around inf
Simplified85.4%
(FPCore (alpha beta) :precision binary64 (if (<= beta 7e+14) 0.5 1.0))
double code(double alpha, double beta) {
double tmp;
if (beta <= 7e+14) {
tmp = 0.5;
} 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 <= 7d+14) then
tmp = 0.5d0
else
tmp = 1.0d0
end if
code = tmp
end function
public static double code(double alpha, double beta) {
double tmp;
if (beta <= 7e+14) {
tmp = 0.5;
} else {
tmp = 1.0;
}
return tmp;
}
def code(alpha, beta): tmp = 0 if beta <= 7e+14: tmp = 0.5 else: tmp = 1.0 return tmp
function code(alpha, beta) tmp = 0.0 if (beta <= 7e+14) tmp = 0.5; else tmp = 1.0; end return tmp end
function tmp_2 = code(alpha, beta) tmp = 0.0; if (beta <= 7e+14) tmp = 0.5; else tmp = 1.0; end tmp_2 = tmp; end
code[alpha_, beta_] := If[LessEqual[beta, 7e+14], 0.5, 1.0]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\beta \leq 7 \cdot 10^{+14}:\\
\;\;\;\;0.5\\
\mathbf{else}:\\
\;\;\;\;1\\
\end{array}
\end{array}
if beta < 7e14Initial program 66.1%
Taylor expanded in alpha around 0
+-commutativeN/A
distribute-lft-inN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
+-lowering-+.f6464.5
Simplified64.5%
Taylor expanded in beta around 0
Simplified62.7%
if 7e14 < beta Initial program 87.7%
Taylor expanded in beta around inf
Simplified87.3%
(FPCore (alpha beta) :precision binary64 0.5)
double code(double alpha, double beta) {
return 0.5;
}
real(8) function code(alpha, beta)
real(8), intent (in) :: alpha
real(8), intent (in) :: beta
code = 0.5d0
end function
public static double code(double alpha, double beta) {
return 0.5;
}
def code(alpha, beta): return 0.5
function code(alpha, beta) return 0.5 end
function tmp = code(alpha, beta) tmp = 0.5; end
code[alpha_, beta_] := 0.5
\begin{array}{l}
\\
0.5
\end{array}
Initial program 72.9%
Taylor expanded in alpha around 0
+-commutativeN/A
distribute-lft-inN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
+-lowering-+.f6471.7
Simplified71.7%
Taylor expanded in beta around 0
Simplified48.3%
(FPCore (alpha beta) :precision binary64 0.0)
double code(double alpha, double beta) {
return 0.0;
}
real(8) function code(alpha, beta)
real(8), intent (in) :: alpha
real(8), intent (in) :: beta
code = 0.0d0
end function
public static double code(double alpha, double beta) {
return 0.0;
}
def code(alpha, beta): return 0.0
function code(alpha, beta) return 0.0 end
function tmp = code(alpha, beta) tmp = 0.0; end
code[alpha_, beta_] := 0.0
\begin{array}{l}
\\
0
\end{array}
Initial program 72.9%
clear-numN/A
associate-/r/N/A
distribute-rgt-inN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
--lowering--.f64N/A
+-commutativeN/A
associate-+l+N/A
+-lowering-+.f64N/A
+-lowering-+.f64N/A
metadata-evalN/A
metadata-eval72.9
Applied egg-rr72.9%
Taylor expanded in beta around 0
+-commutativeN/A
accelerator-lowering-fma.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6448.6
Simplified48.6%
Taylor expanded in alpha around inf
Simplified3.6%
metadata-evalN/A
metadata-eval3.6
Applied egg-rr3.6%
herbie shell --seed 2024196
(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))