
(FPCore (a k m) :precision binary64 (/ (* a (pow k m)) (+ (+ 1.0 (* 10.0 k)) (* k k))))
double code(double a, double k, double m) {
return (a * pow(k, m)) / ((1.0 + (10.0 * k)) + (k * k));
}
real(8) function code(a, k, m)
real(8), intent (in) :: a
real(8), intent (in) :: k
real(8), intent (in) :: m
code = (a * (k ** m)) / ((1.0d0 + (10.0d0 * k)) + (k * k))
end function
public static double code(double a, double k, double m) {
return (a * Math.pow(k, m)) / ((1.0 + (10.0 * k)) + (k * k));
}
def code(a, k, m): return (a * math.pow(k, m)) / ((1.0 + (10.0 * k)) + (k * k))
function code(a, k, m) return Float64(Float64(a * (k ^ m)) / Float64(Float64(1.0 + Float64(10.0 * k)) + Float64(k * k))) end
function tmp = code(a, k, m) tmp = (a * (k ^ m)) / ((1.0 + (10.0 * k)) + (k * k)); end
code[a_, k_, m_] := N[(N[(a * N[Power[k, m], $MachinePrecision]), $MachinePrecision] / N[(N[(1.0 + N[(10.0 * k), $MachinePrecision]), $MachinePrecision] + N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{a \cdot {k}^{m}}{\left(1 + 10 \cdot k\right) + k \cdot k}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 16 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (a k m) :precision binary64 (/ (* a (pow k m)) (+ (+ 1.0 (* 10.0 k)) (* k k))))
double code(double a, double k, double m) {
return (a * pow(k, m)) / ((1.0 + (10.0 * k)) + (k * k));
}
real(8) function code(a, k, m)
real(8), intent (in) :: a
real(8), intent (in) :: k
real(8), intent (in) :: m
code = (a * (k ** m)) / ((1.0d0 + (10.0d0 * k)) + (k * k))
end function
public static double code(double a, double k, double m) {
return (a * Math.pow(k, m)) / ((1.0 + (10.0 * k)) + (k * k));
}
def code(a, k, m): return (a * math.pow(k, m)) / ((1.0 + (10.0 * k)) + (k * k))
function code(a, k, m) return Float64(Float64(a * (k ^ m)) / Float64(Float64(1.0 + Float64(10.0 * k)) + Float64(k * k))) end
function tmp = code(a, k, m) tmp = (a * (k ^ m)) / ((1.0 + (10.0 * k)) + (k * k)); end
code[a_, k_, m_] := N[(N[(a * N[Power[k, m], $MachinePrecision]), $MachinePrecision] / N[(N[(1.0 + N[(10.0 * k), $MachinePrecision]), $MachinePrecision] + N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{a \cdot {k}^{m}}{\left(1 + 10 \cdot k\right) + k \cdot k}
\end{array}
(FPCore (a k m) :precision binary64 (let* ((t_0 (* a (pow k m)))) (if (<= k 7e-15) t_0 (/ (/ t_0 k) k))))
double code(double a, double k, double m) {
double t_0 = a * pow(k, m);
double tmp;
if (k <= 7e-15) {
tmp = t_0;
} else {
tmp = (t_0 / k) / k;
}
return tmp;
}
real(8) function code(a, k, m)
real(8), intent (in) :: a
real(8), intent (in) :: k
real(8), intent (in) :: m
real(8) :: t_0
real(8) :: tmp
t_0 = a * (k ** m)
if (k <= 7d-15) then
tmp = t_0
else
tmp = (t_0 / k) / k
end if
code = tmp
end function
public static double code(double a, double k, double m) {
double t_0 = a * Math.pow(k, m);
double tmp;
if (k <= 7e-15) {
tmp = t_0;
} else {
tmp = (t_0 / k) / k;
}
return tmp;
}
def code(a, k, m): t_0 = a * math.pow(k, m) tmp = 0 if k <= 7e-15: tmp = t_0 else: tmp = (t_0 / k) / k return tmp
function code(a, k, m) t_0 = Float64(a * (k ^ m)) tmp = 0.0 if (k <= 7e-15) tmp = t_0; else tmp = Float64(Float64(t_0 / k) / k); end return tmp end
function tmp_2 = code(a, k, m) t_0 = a * (k ^ m); tmp = 0.0; if (k <= 7e-15) tmp = t_0; else tmp = (t_0 / k) / k; end tmp_2 = tmp; end
code[a_, k_, m_] := Block[{t$95$0 = N[(a * N[Power[k, m], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[k, 7e-15], t$95$0, N[(N[(t$95$0 / k), $MachinePrecision] / k), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := a \cdot {k}^{m}\\
\mathbf{if}\;k \leq 7 \cdot 10^{-15}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{t\_0}{k}}{k}\\
\end{array}
\end{array}
if k < 7.0000000000000001e-15Initial program 95.3%
Taylor expanded in k around 0
lower-*.f64N/A
lower-pow.f6499.9
Simplified99.9%
if 7.0000000000000001e-15 < k Initial program 81.4%
Taylor expanded in k around inf
unpow2N/A
lower-*.f6481.0
Simplified81.0%
lift-pow.f64N/A
lift-*.f64N/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f6499.6
Applied egg-rr99.6%
(FPCore (a k m)
:precision binary64
(let* ((t_0 (/ (* a (pow k m)) (+ (+ (* k 10.0) 1.0) (* k k)))))
(if (<= t_0 0.0)
(/
a
(fma
k
(*
(fma k k -100.0)
(/ (+ (/ (+ 10.0 (+ (/ 100.0 k) (/ 1000.0 (* k k)))) k) 1.0) k))
1.0))
(if (<= t_0 2e+264)
(/ a (fma k (+ k 10.0) 1.0))
(* a (+ (* (* k (+ k 10.0)) (fma k (+ k 10.0) -1.0)) 1.0))))))
double code(double a, double k, double m) {
double t_0 = (a * pow(k, m)) / (((k * 10.0) + 1.0) + (k * k));
double tmp;
if (t_0 <= 0.0) {
tmp = a / fma(k, (fma(k, k, -100.0) * ((((10.0 + ((100.0 / k) + (1000.0 / (k * k)))) / k) + 1.0) / k)), 1.0);
} else if (t_0 <= 2e+264) {
tmp = a / fma(k, (k + 10.0), 1.0);
} else {
tmp = a * (((k * (k + 10.0)) * fma(k, (k + 10.0), -1.0)) + 1.0);
}
return tmp;
}
function code(a, k, m) t_0 = Float64(Float64(a * (k ^ m)) / Float64(Float64(Float64(k * 10.0) + 1.0) + Float64(k * k))) tmp = 0.0 if (t_0 <= 0.0) tmp = Float64(a / fma(k, Float64(fma(k, k, -100.0) * Float64(Float64(Float64(Float64(10.0 + Float64(Float64(100.0 / k) + Float64(1000.0 / Float64(k * k)))) / k) + 1.0) / k)), 1.0)); elseif (t_0 <= 2e+264) tmp = Float64(a / fma(k, Float64(k + 10.0), 1.0)); else tmp = Float64(a * Float64(Float64(Float64(k * Float64(k + 10.0)) * fma(k, Float64(k + 10.0), -1.0)) + 1.0)); end return tmp end
code[a_, k_, m_] := Block[{t$95$0 = N[(N[(a * N[Power[k, m], $MachinePrecision]), $MachinePrecision] / N[(N[(N[(k * 10.0), $MachinePrecision] + 1.0), $MachinePrecision] + N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, 0.0], N[(a / N[(k * N[(N[(k * k + -100.0), $MachinePrecision] * N[(N[(N[(N[(10.0 + N[(N[(100.0 / k), $MachinePrecision] + N[(1000.0 / N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / k), $MachinePrecision] + 1.0), $MachinePrecision] / k), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$0, 2e+264], N[(a / N[(k * N[(k + 10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(a * N[(N[(N[(k * N[(k + 10.0), $MachinePrecision]), $MachinePrecision] * N[(k * N[(k + 10.0), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{a \cdot {k}^{m}}{\left(k \cdot 10 + 1\right) + k \cdot k}\\
\mathbf{if}\;t\_0 \leq 0:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, \mathsf{fma}\left(k, k, -100\right) \cdot \frac{\frac{10 + \left(\frac{100}{k} + \frac{1000}{k \cdot k}\right)}{k} + 1}{k}, 1\right)}\\
\mathbf{elif}\;t\_0 \leq 2 \cdot 10^{+264}:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, k + 10, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;a \cdot \left(\left(k \cdot \left(k + 10\right)\right) \cdot \mathsf{fma}\left(k, k + 10, -1\right) + 1\right)\\
\end{array}
\end{array}
if (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) < 0.0Initial program 96.9%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6453.2
Simplified53.2%
+-commutativeN/A
flip-+N/A
div-invN/A
lower-*.f64N/A
lift-*.f64N/A
sub-negN/A
lift-*.f64N/A
lower-fma.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-/.f64N/A
sub-negN/A
metadata-evalN/A
lower-+.f6453.2
Applied egg-rr53.2%
Taylor expanded in k around -inf
mul-1-negN/A
distribute-neg-frac2N/A
mul-1-negN/A
lower-/.f64N/A
Simplified60.0%
if 0.0 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) < 2.00000000000000009e264Initial program 99.9%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6498.1
Simplified98.1%
if 2.00000000000000009e264 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) Initial program 53.3%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f642.6
Simplified2.6%
lift-+.f64N/A
+-commutativeN/A
flip3-+N/A
metadata-evalN/A
+-commutativeN/A
metadata-evalN/A
associate-/r/N/A
lower-*.f64N/A
Applied egg-rr1.4%
Taylor expanded in k around 0
Simplified72.3%
Final simplification66.6%
(FPCore (a k m)
:precision binary64
(let* ((t_0 (/ (* a (pow k m)) (+ (+ (* k 10.0) 1.0) (* k k)))))
(if (<= t_0 0.0)
(/ a (fma k (* (fma k k -100.0) (/ (+ (/ 10.0 k) 1.0) k)) 1.0))
(if (<= t_0 2e+264)
(/ a (fma k (+ k 10.0) 1.0))
(* a (+ (* (* k (+ k 10.0)) (fma k (+ k 10.0) -1.0)) 1.0))))))
double code(double a, double k, double m) {
double t_0 = (a * pow(k, m)) / (((k * 10.0) + 1.0) + (k * k));
double tmp;
if (t_0 <= 0.0) {
tmp = a / fma(k, (fma(k, k, -100.0) * (((10.0 / k) + 1.0) / k)), 1.0);
} else if (t_0 <= 2e+264) {
tmp = a / fma(k, (k + 10.0), 1.0);
} else {
tmp = a * (((k * (k + 10.0)) * fma(k, (k + 10.0), -1.0)) + 1.0);
}
return tmp;
}
function code(a, k, m) t_0 = Float64(Float64(a * (k ^ m)) / Float64(Float64(Float64(k * 10.0) + 1.0) + Float64(k * k))) tmp = 0.0 if (t_0 <= 0.0) tmp = Float64(a / fma(k, Float64(fma(k, k, -100.0) * Float64(Float64(Float64(10.0 / k) + 1.0) / k)), 1.0)); elseif (t_0 <= 2e+264) tmp = Float64(a / fma(k, Float64(k + 10.0), 1.0)); else tmp = Float64(a * Float64(Float64(Float64(k * Float64(k + 10.0)) * fma(k, Float64(k + 10.0), -1.0)) + 1.0)); end return tmp end
code[a_, k_, m_] := Block[{t$95$0 = N[(N[(a * N[Power[k, m], $MachinePrecision]), $MachinePrecision] / N[(N[(N[(k * 10.0), $MachinePrecision] + 1.0), $MachinePrecision] + N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, 0.0], N[(a / N[(k * N[(N[(k * k + -100.0), $MachinePrecision] * N[(N[(N[(10.0 / k), $MachinePrecision] + 1.0), $MachinePrecision] / k), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$0, 2e+264], N[(a / N[(k * N[(k + 10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(a * N[(N[(N[(k * N[(k + 10.0), $MachinePrecision]), $MachinePrecision] * N[(k * N[(k + 10.0), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{a \cdot {k}^{m}}{\left(k \cdot 10 + 1\right) + k \cdot k}\\
\mathbf{if}\;t\_0 \leq 0:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, \mathsf{fma}\left(k, k, -100\right) \cdot \frac{\frac{10}{k} + 1}{k}, 1\right)}\\
\mathbf{elif}\;t\_0 \leq 2 \cdot 10^{+264}:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, k + 10, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;a \cdot \left(\left(k \cdot \left(k + 10\right)\right) \cdot \mathsf{fma}\left(k, k + 10, -1\right) + 1\right)\\
\end{array}
\end{array}
if (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) < 0.0Initial program 96.9%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6453.2
Simplified53.2%
+-commutativeN/A
flip-+N/A
div-invN/A
lower-*.f64N/A
lift-*.f64N/A
sub-negN/A
lift-*.f64N/A
lower-fma.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-/.f64N/A
sub-negN/A
metadata-evalN/A
lower-+.f6453.2
Applied egg-rr53.2%
Taylor expanded in k around inf
lower-/.f64N/A
lower-+.f64N/A
associate-*r/N/A
metadata-evalN/A
lower-/.f6451.6
Simplified51.6%
if 0.0 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) < 2.00000000000000009e264Initial program 99.9%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6498.1
Simplified98.1%
if 2.00000000000000009e264 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) Initial program 53.3%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f642.6
Simplified2.6%
lift-+.f64N/A
+-commutativeN/A
flip3-+N/A
metadata-evalN/A
+-commutativeN/A
metadata-evalN/A
associate-/r/N/A
lower-*.f64N/A
Applied egg-rr1.4%
Taylor expanded in k around 0
Simplified72.3%
Final simplification60.7%
(FPCore (a k m) :precision binary64 (if (<= k 7e-15) (* a (pow k m)) (/ (* a (pow k (+ m -1.0))) k)))
double code(double a, double k, double m) {
double tmp;
if (k <= 7e-15) {
tmp = a * pow(k, m);
} else {
tmp = (a * pow(k, (m + -1.0))) / k;
}
return tmp;
}
real(8) function code(a, k, m)
real(8), intent (in) :: a
real(8), intent (in) :: k
real(8), intent (in) :: m
real(8) :: tmp
if (k <= 7d-15) then
tmp = a * (k ** m)
else
tmp = (a * (k ** (m + (-1.0d0)))) / k
end if
code = tmp
end function
public static double code(double a, double k, double m) {
double tmp;
if (k <= 7e-15) {
tmp = a * Math.pow(k, m);
} else {
tmp = (a * Math.pow(k, (m + -1.0))) / k;
}
return tmp;
}
def code(a, k, m): tmp = 0 if k <= 7e-15: tmp = a * math.pow(k, m) else: tmp = (a * math.pow(k, (m + -1.0))) / k return tmp
function code(a, k, m) tmp = 0.0 if (k <= 7e-15) tmp = Float64(a * (k ^ m)); else tmp = Float64(Float64(a * (k ^ Float64(m + -1.0))) / k); end return tmp end
function tmp_2 = code(a, k, m) tmp = 0.0; if (k <= 7e-15) tmp = a * (k ^ m); else tmp = (a * (k ^ (m + -1.0))) / k; end tmp_2 = tmp; end
code[a_, k_, m_] := If[LessEqual[k, 7e-15], N[(a * N[Power[k, m], $MachinePrecision]), $MachinePrecision], N[(N[(a * N[Power[k, N[(m + -1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / k), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;k \leq 7 \cdot 10^{-15}:\\
\;\;\;\;a \cdot {k}^{m}\\
\mathbf{else}:\\
\;\;\;\;\frac{a \cdot {k}^{\left(m + -1\right)}}{k}\\
\end{array}
\end{array}
if k < 7.0000000000000001e-15Initial program 95.3%
Taylor expanded in k around 0
lower-*.f64N/A
lower-pow.f6499.9
Simplified99.9%
if 7.0000000000000001e-15 < k Initial program 81.4%
Taylor expanded in k around inf
unpow2N/A
lower-*.f6481.0
Simplified81.0%
lift-pow.f64N/A
lift-*.f64N/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f6499.6
Applied egg-rr99.6%
lift-pow.f64N/A
associate-/l*N/A
*-commutativeN/A
lower-*.f64N/A
div-invN/A
lift-pow.f64N/A
inv-powN/A
pow-prod-upN/A
lower-pow.f64N/A
lower-+.f6499.2
Applied egg-rr99.2%
Final simplification99.6%
(FPCore (a k m)
:precision binary64
(let* ((t_0 (* a (pow k m))))
(if (<= m -30000.0)
t_0
(if (<= m 0.0058) (/ a (fma k (+ k 10.0) 1.0)) t_0))))
double code(double a, double k, double m) {
double t_0 = a * pow(k, m);
double tmp;
if (m <= -30000.0) {
tmp = t_0;
} else if (m <= 0.0058) {
tmp = a / fma(k, (k + 10.0), 1.0);
} else {
tmp = t_0;
}
return tmp;
}
function code(a, k, m) t_0 = Float64(a * (k ^ m)) tmp = 0.0 if (m <= -30000.0) tmp = t_0; elseif (m <= 0.0058) tmp = Float64(a / fma(k, Float64(k + 10.0), 1.0)); else tmp = t_0; end return tmp end
code[a_, k_, m_] := Block[{t$95$0 = N[(a * N[Power[k, m], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[m, -30000.0], t$95$0, If[LessEqual[m, 0.0058], N[(a / N[(k * N[(k + 10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := a \cdot {k}^{m}\\
\mathbf{if}\;m \leq -30000:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;m \leq 0.0058:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, k + 10, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if m < -3e4 or 0.0058 < m Initial program 87.1%
Taylor expanded in k around 0
lower-*.f64N/A
lower-pow.f64100.0
Simplified100.0%
if -3e4 < m < 0.0058Initial program 94.0%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6493.4
Simplified93.4%
Final simplification97.6%
(FPCore (a k m) :precision binary64 (if (<= k 7e-15) (* a (pow k m)) (* a (pow k (+ m -2.0)))))
double code(double a, double k, double m) {
double tmp;
if (k <= 7e-15) {
tmp = a * pow(k, m);
} else {
tmp = a * pow(k, (m + -2.0));
}
return tmp;
}
real(8) function code(a, k, m)
real(8), intent (in) :: a
real(8), intent (in) :: k
real(8), intent (in) :: m
real(8) :: tmp
if (k <= 7d-15) then
tmp = a * (k ** m)
else
tmp = a * (k ** (m + (-2.0d0)))
end if
code = tmp
end function
public static double code(double a, double k, double m) {
double tmp;
if (k <= 7e-15) {
tmp = a * Math.pow(k, m);
} else {
tmp = a * Math.pow(k, (m + -2.0));
}
return tmp;
}
def code(a, k, m): tmp = 0 if k <= 7e-15: tmp = a * math.pow(k, m) else: tmp = a * math.pow(k, (m + -2.0)) return tmp
function code(a, k, m) tmp = 0.0 if (k <= 7e-15) tmp = Float64(a * (k ^ m)); else tmp = Float64(a * (k ^ Float64(m + -2.0))); end return tmp end
function tmp_2 = code(a, k, m) tmp = 0.0; if (k <= 7e-15) tmp = a * (k ^ m); else tmp = a * (k ^ (m + -2.0)); end tmp_2 = tmp; end
code[a_, k_, m_] := If[LessEqual[k, 7e-15], N[(a * N[Power[k, m], $MachinePrecision]), $MachinePrecision], N[(a * N[Power[k, N[(m + -2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;k \leq 7 \cdot 10^{-15}:\\
\;\;\;\;a \cdot {k}^{m}\\
\mathbf{else}:\\
\;\;\;\;a \cdot {k}^{\left(m + -2\right)}\\
\end{array}
\end{array}
if k < 7.0000000000000001e-15Initial program 95.3%
Taylor expanded in k around 0
lower-*.f64N/A
lower-pow.f6499.9
Simplified99.9%
if 7.0000000000000001e-15 < k Initial program 81.4%
Taylor expanded in k around inf
unpow2N/A
lower-*.f6481.0
Simplified81.0%
lift-pow.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*l/N/A
lower-*.f64N/A
lift-pow.f64N/A
lift-*.f64N/A
pow2N/A
pow-divN/A
lower-pow.f64N/A
sub-negN/A
lower-+.f64N/A
metadata-eval94.2
Applied egg-rr94.2%
Final simplification97.6%
(FPCore (a k m) :precision binary64 (if (<= m -30000.0) (/ (fma (/ a k) (+ -10.0 (/ 99.0 k)) a) (* k k)) (if (<= m 0.92) (/ a (fma k (+ k 10.0) 1.0)) (* k (* k (* a 99.0))))))
double code(double a, double k, double m) {
double tmp;
if (m <= -30000.0) {
tmp = fma((a / k), (-10.0 + (99.0 / k)), a) / (k * k);
} else if (m <= 0.92) {
tmp = a / fma(k, (k + 10.0), 1.0);
} else {
tmp = k * (k * (a * 99.0));
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (m <= -30000.0) tmp = Float64(fma(Float64(a / k), Float64(-10.0 + Float64(99.0 / k)), a) / Float64(k * k)); elseif (m <= 0.92) tmp = Float64(a / fma(k, Float64(k + 10.0), 1.0)); else tmp = Float64(k * Float64(k * Float64(a * 99.0))); end return tmp end
code[a_, k_, m_] := If[LessEqual[m, -30000.0], N[(N[(N[(a / k), $MachinePrecision] * N[(-10.0 + N[(99.0 / k), $MachinePrecision]), $MachinePrecision] + a), $MachinePrecision] / N[(k * k), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 0.92], N[(a / N[(k * N[(k + 10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(k * N[(k * N[(a * 99.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;m \leq -30000:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{a}{k}, -10 + \frac{99}{k}, a\right)}{k \cdot k}\\
\mathbf{elif}\;m \leq 0.92:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, k + 10, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;k \cdot \left(k \cdot \left(a \cdot 99\right)\right)\\
\end{array}
\end{array}
if m < -3e4Initial program 100.0%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6451.3
Simplified51.3%
+-commutativeN/A
flip-+N/A
div-invN/A
lower-*.f64N/A
lift-*.f64N/A
sub-negN/A
lift-*.f64N/A
lower-fma.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-/.f64N/A
sub-negN/A
metadata-evalN/A
lower-+.f6451.3
Applied egg-rr51.3%
Taylor expanded in k around inf
associate--l+N/A
cancel-sign-sub-invN/A
mul-1-negN/A
distribute-neg-fracN/A
distribute-rgt1-inN/A
metadata-evalN/A
distribute-lft-neg-inN/A
metadata-evalN/A
associate-*r/N/A
metadata-evalN/A
+-commutativeN/A
lower-/.f64N/A
Simplified72.5%
if -3e4 < m < 0.92000000000000004Initial program 94.0%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6493.4
Simplified93.4%
if 0.92000000000000004 < m Initial program 76.7%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f643.0
Simplified3.0%
Taylor expanded in k around 0
+-commutativeN/A
lower-fma.f64N/A
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
mul-1-negN/A
*-commutativeN/A
distribute-rgt1-inN/A
associate-*l*N/A
distribute-lft-neg-inN/A
lower-*.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-*.f6430.0
Simplified30.0%
Taylor expanded in k around inf
unpow2N/A
associate-*r*N/A
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f6451.4
Simplified51.4%
Final simplification72.7%
(FPCore (a k m)
:precision binary64
(if (<= m -1.75e-40)
(/ a (* k k))
(if (<= m 2.1e-183)
(/ a (fma k 10.0 1.0))
(if (<= m 0.92) (/ a (* k (+ k 10.0))) (* k (* k (* a 99.0)))))))
double code(double a, double k, double m) {
double tmp;
if (m <= -1.75e-40) {
tmp = a / (k * k);
} else if (m <= 2.1e-183) {
tmp = a / fma(k, 10.0, 1.0);
} else if (m <= 0.92) {
tmp = a / (k * (k + 10.0));
} else {
tmp = k * (k * (a * 99.0));
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (m <= -1.75e-40) tmp = Float64(a / Float64(k * k)); elseif (m <= 2.1e-183) tmp = Float64(a / fma(k, 10.0, 1.0)); elseif (m <= 0.92) tmp = Float64(a / Float64(k * Float64(k + 10.0))); else tmp = Float64(k * Float64(k * Float64(a * 99.0))); end return tmp end
code[a_, k_, m_] := If[LessEqual[m, -1.75e-40], N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 2.1e-183], N[(a / N[(k * 10.0 + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 0.92], N[(a / N[(k * N[(k + 10.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(k * N[(k * N[(a * 99.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;m \leq -1.75 \cdot 10^{-40}:\\
\;\;\;\;\frac{a}{k \cdot k}\\
\mathbf{elif}\;m \leq 2.1 \cdot 10^{-183}:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, 10, 1\right)}\\
\mathbf{elif}\;m \leq 0.92:\\
\;\;\;\;\frac{a}{k \cdot \left(k + 10\right)}\\
\mathbf{else}:\\
\;\;\;\;k \cdot \left(k \cdot \left(a \cdot 99\right)\right)\\
\end{array}
\end{array}
if m < -1.7500000000000001e-40Initial program 97.6%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6451.6
Simplified51.6%
Taylor expanded in k around inf
unpow2N/A
lower-*.f6465.3
Simplified65.3%
if -1.7500000000000001e-40 < m < 2.1000000000000002e-183Initial program 98.4%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6498.4
Simplified98.4%
Taylor expanded in k around 0
+-commutativeN/A
*-commutativeN/A
lower-fma.f6471.7
Simplified71.7%
if 2.1000000000000002e-183 < m < 0.92000000000000004Initial program 91.2%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6490.4
Simplified90.4%
Taylor expanded in k around inf
unpow2N/A
associate-*l*N/A
+-commutativeN/A
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-*.f64N/A
+-commutativeN/A
lower-+.f6467.6
Simplified67.6%
if 0.92000000000000004 < m Initial program 76.7%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f643.0
Simplified3.0%
Taylor expanded in k around 0
+-commutativeN/A
lower-fma.f64N/A
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
mul-1-negN/A
*-commutativeN/A
distribute-rgt1-inN/A
associate-*l*N/A
distribute-lft-neg-inN/A
lower-*.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-*.f6430.0
Simplified30.0%
Taylor expanded in k around inf
unpow2N/A
associate-*r*N/A
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f6451.4
Simplified51.4%
(FPCore (a k m)
:precision binary64
(let* ((t_0 (/ a (* k k))))
(if (<= m -1.75e-40)
t_0
(if (<= m 2.1e-183)
(/ a (fma k 10.0 1.0))
(if (<= m 0.92) t_0 (* k (* k (* a 99.0))))))))
double code(double a, double k, double m) {
double t_0 = a / (k * k);
double tmp;
if (m <= -1.75e-40) {
tmp = t_0;
} else if (m <= 2.1e-183) {
tmp = a / fma(k, 10.0, 1.0);
} else if (m <= 0.92) {
tmp = t_0;
} else {
tmp = k * (k * (a * 99.0));
}
return tmp;
}
function code(a, k, m) t_0 = Float64(a / Float64(k * k)) tmp = 0.0 if (m <= -1.75e-40) tmp = t_0; elseif (m <= 2.1e-183) tmp = Float64(a / fma(k, 10.0, 1.0)); elseif (m <= 0.92) tmp = t_0; else tmp = Float64(k * Float64(k * Float64(a * 99.0))); end return tmp end
code[a_, k_, m_] := Block[{t$95$0 = N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[m, -1.75e-40], t$95$0, If[LessEqual[m, 2.1e-183], N[(a / N[(k * 10.0 + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 0.92], t$95$0, N[(k * N[(k * N[(a * 99.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{a}{k \cdot k}\\
\mathbf{if}\;m \leq -1.75 \cdot 10^{-40}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;m \leq 2.1 \cdot 10^{-183}:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, 10, 1\right)}\\
\mathbf{elif}\;m \leq 0.92:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;k \cdot \left(k \cdot \left(a \cdot 99\right)\right)\\
\end{array}
\end{array}
if m < -1.7500000000000001e-40 or 2.1000000000000002e-183 < m < 0.92000000000000004Initial program 95.7%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6462.9
Simplified62.9%
Taylor expanded in k around inf
unpow2N/A
lower-*.f6465.9
Simplified65.9%
if -1.7500000000000001e-40 < m < 2.1000000000000002e-183Initial program 98.4%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6498.4
Simplified98.4%
Taylor expanded in k around 0
+-commutativeN/A
*-commutativeN/A
lower-fma.f6471.7
Simplified71.7%
if 0.92000000000000004 < m Initial program 76.7%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f643.0
Simplified3.0%
Taylor expanded in k around 0
+-commutativeN/A
lower-fma.f64N/A
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
mul-1-negN/A
*-commutativeN/A
distribute-rgt1-inN/A
associate-*l*N/A
distribute-lft-neg-inN/A
lower-*.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-*.f6430.0
Simplified30.0%
Taylor expanded in k around inf
unpow2N/A
associate-*r*N/A
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f6451.4
Simplified51.4%
(FPCore (a k m)
:precision binary64
(let* ((t_0 (/ a (* k k))))
(if (<= m -3.4e-49)
t_0
(if (<= m -2.7e-277) a (if (<= m 0.92) t_0 (* k (* k (* a 99.0))))))))
double code(double a, double k, double m) {
double t_0 = a / (k * k);
double tmp;
if (m <= -3.4e-49) {
tmp = t_0;
} else if (m <= -2.7e-277) {
tmp = a;
} else if (m <= 0.92) {
tmp = t_0;
} else {
tmp = k * (k * (a * 99.0));
}
return tmp;
}
real(8) function code(a, k, m)
real(8), intent (in) :: a
real(8), intent (in) :: k
real(8), intent (in) :: m
real(8) :: t_0
real(8) :: tmp
t_0 = a / (k * k)
if (m <= (-3.4d-49)) then
tmp = t_0
else if (m <= (-2.7d-277)) then
tmp = a
else if (m <= 0.92d0) then
tmp = t_0
else
tmp = k * (k * (a * 99.0d0))
end if
code = tmp
end function
public static double code(double a, double k, double m) {
double t_0 = a / (k * k);
double tmp;
if (m <= -3.4e-49) {
tmp = t_0;
} else if (m <= -2.7e-277) {
tmp = a;
} else if (m <= 0.92) {
tmp = t_0;
} else {
tmp = k * (k * (a * 99.0));
}
return tmp;
}
def code(a, k, m): t_0 = a / (k * k) tmp = 0 if m <= -3.4e-49: tmp = t_0 elif m <= -2.7e-277: tmp = a elif m <= 0.92: tmp = t_0 else: tmp = k * (k * (a * 99.0)) return tmp
function code(a, k, m) t_0 = Float64(a / Float64(k * k)) tmp = 0.0 if (m <= -3.4e-49) tmp = t_0; elseif (m <= -2.7e-277) tmp = a; elseif (m <= 0.92) tmp = t_0; else tmp = Float64(k * Float64(k * Float64(a * 99.0))); end return tmp end
function tmp_2 = code(a, k, m) t_0 = a / (k * k); tmp = 0.0; if (m <= -3.4e-49) tmp = t_0; elseif (m <= -2.7e-277) tmp = a; elseif (m <= 0.92) tmp = t_0; else tmp = k * (k * (a * 99.0)); end tmp_2 = tmp; end
code[a_, k_, m_] := Block[{t$95$0 = N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[m, -3.4e-49], t$95$0, If[LessEqual[m, -2.7e-277], a, If[LessEqual[m, 0.92], t$95$0, N[(k * N[(k * N[(a * 99.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{a}{k \cdot k}\\
\mathbf{if}\;m \leq -3.4 \cdot 10^{-49}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;m \leq -2.7 \cdot 10^{-277}:\\
\;\;\;\;a\\
\mathbf{elif}\;m \leq 0.92:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;k \cdot \left(k \cdot \left(a \cdot 99\right)\right)\\
\end{array}
\end{array}
if m < -3.40000000000000005e-49 or -2.69999999999999975e-277 < m < 0.92000000000000004Initial program 96.5%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6469.8
Simplified69.8%
Taylor expanded in k around inf
unpow2N/A
lower-*.f6463.4
Simplified63.4%
if -3.40000000000000005e-49 < m < -2.69999999999999975e-277Initial program 97.1%
Taylor expanded in k around 0
lower-*.f64N/A
lower-pow.f6474.9
Simplified74.9%
Taylor expanded in m around 0
Simplified74.9%
*-rgt-identity74.9
Applied egg-rr74.9%
if 0.92000000000000004 < m Initial program 76.7%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f643.0
Simplified3.0%
Taylor expanded in k around 0
+-commutativeN/A
lower-fma.f64N/A
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
mul-1-negN/A
*-commutativeN/A
distribute-rgt1-inN/A
associate-*l*N/A
distribute-lft-neg-inN/A
lower-*.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-*.f6430.0
Simplified30.0%
Taylor expanded in k around inf
unpow2N/A
associate-*r*N/A
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f6451.4
Simplified51.4%
(FPCore (a k m) :precision binary64 (if (<= m -5e-34) (* a (/ 1.0 (* k k))) (if (<= m 0.92) (/ a (fma k (+ k 10.0) 1.0)) (* k (* k (* a 99.0))))))
double code(double a, double k, double m) {
double tmp;
if (m <= -5e-34) {
tmp = a * (1.0 / (k * k));
} else if (m <= 0.92) {
tmp = a / fma(k, (k + 10.0), 1.0);
} else {
tmp = k * (k * (a * 99.0));
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (m <= -5e-34) tmp = Float64(a * Float64(1.0 / Float64(k * k))); elseif (m <= 0.92) tmp = Float64(a / fma(k, Float64(k + 10.0), 1.0)); else tmp = Float64(k * Float64(k * Float64(a * 99.0))); end return tmp end
code[a_, k_, m_] := If[LessEqual[m, -5e-34], N[(a * N[(1.0 / N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 0.92], N[(a / N[(k * N[(k + 10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(k * N[(k * N[(a * 99.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;m \leq -5 \cdot 10^{-34}:\\
\;\;\;\;a \cdot \frac{1}{k \cdot k}\\
\mathbf{elif}\;m \leq 0.92:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, k + 10, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;k \cdot \left(k \cdot \left(a \cdot 99\right)\right)\\
\end{array}
\end{array}
if m < -5.0000000000000003e-34Initial program 98.8%
Taylor expanded in k around inf
unpow2N/A
lower-*.f6498.8
Simplified98.8%
lift-pow.f64N/A
lift-*.f64N/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f64100.0
Applied egg-rr100.0%
Taylor expanded in m around 0
lower-/.f6458.6
Simplified58.6%
associate-/l/N/A
lift-*.f64N/A
div-invN/A
remove-double-divN/A
lift-/.f64N/A
inv-powN/A
inv-powN/A
pow-prod-downN/A
*-commutativeN/A
pow-prod-downN/A
inv-powN/A
inv-powN/A
lift-/.f64N/A
remove-double-divN/A
lower-*.f64N/A
lower-/.f6468.6
Applied egg-rr68.6%
if -5.0000000000000003e-34 < m < 0.92000000000000004Initial program 94.8%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6494.5
Simplified94.5%
if 0.92000000000000004 < m Initial program 76.7%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f643.0
Simplified3.0%
Taylor expanded in k around 0
+-commutativeN/A
lower-fma.f64N/A
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
mul-1-negN/A
*-commutativeN/A
distribute-rgt1-inN/A
associate-*l*N/A
distribute-lft-neg-inN/A
lower-*.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-*.f6430.0
Simplified30.0%
Taylor expanded in k around inf
unpow2N/A
associate-*r*N/A
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f6451.4
Simplified51.4%
Final simplification71.6%
(FPCore (a k m) :precision binary64 (if (<= m -30000.0) (/ a (* k k)) (if (<= m 0.92) (/ a (fma k (+ k 10.0) 1.0)) (* k (* k (* a 99.0))))))
double code(double a, double k, double m) {
double tmp;
if (m <= -30000.0) {
tmp = a / (k * k);
} else if (m <= 0.92) {
tmp = a / fma(k, (k + 10.0), 1.0);
} else {
tmp = k * (k * (a * 99.0));
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (m <= -30000.0) tmp = Float64(a / Float64(k * k)); elseif (m <= 0.92) tmp = Float64(a / fma(k, Float64(k + 10.0), 1.0)); else tmp = Float64(k * Float64(k * Float64(a * 99.0))); end return tmp end
code[a_, k_, m_] := If[LessEqual[m, -30000.0], N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 0.92], N[(a / N[(k * N[(k + 10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(k * N[(k * N[(a * 99.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;m \leq -30000:\\
\;\;\;\;\frac{a}{k \cdot k}\\
\mathbf{elif}\;m \leq 0.92:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, k + 10, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;k \cdot \left(k \cdot \left(a \cdot 99\right)\right)\\
\end{array}
\end{array}
if m < -3e4Initial program 100.0%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6451.3
Simplified51.3%
Taylor expanded in k around inf
unpow2N/A
lower-*.f6465.9
Simplified65.9%
if -3e4 < m < 0.92000000000000004Initial program 94.0%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6493.4
Simplified93.4%
if 0.92000000000000004 < m Initial program 76.7%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f643.0
Simplified3.0%
Taylor expanded in k around 0
+-commutativeN/A
lower-fma.f64N/A
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
mul-1-negN/A
*-commutativeN/A
distribute-rgt1-inN/A
associate-*l*N/A
distribute-lft-neg-inN/A
lower-*.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-*.f6430.0
Simplified30.0%
Taylor expanded in k around inf
unpow2N/A
associate-*r*N/A
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f6451.4
Simplified51.4%
Final simplification70.8%
(FPCore (a k m) :precision binary64 (if (<= m 0.37) a (* k (* k (* a 99.0)))))
double code(double a, double k, double m) {
double tmp;
if (m <= 0.37) {
tmp = a;
} else {
tmp = k * (k * (a * 99.0));
}
return tmp;
}
real(8) function code(a, k, m)
real(8), intent (in) :: a
real(8), intent (in) :: k
real(8), intent (in) :: m
real(8) :: tmp
if (m <= 0.37d0) then
tmp = a
else
tmp = k * (k * (a * 99.0d0))
end if
code = tmp
end function
public static double code(double a, double k, double m) {
double tmp;
if (m <= 0.37) {
tmp = a;
} else {
tmp = k * (k * (a * 99.0));
}
return tmp;
}
def code(a, k, m): tmp = 0 if m <= 0.37: tmp = a else: tmp = k * (k * (a * 99.0)) return tmp
function code(a, k, m) tmp = 0.0 if (m <= 0.37) tmp = a; else tmp = Float64(k * Float64(k * Float64(a * 99.0))); end return tmp end
function tmp_2 = code(a, k, m) tmp = 0.0; if (m <= 0.37) tmp = a; else tmp = k * (k * (a * 99.0)); end tmp_2 = tmp; end
code[a_, k_, m_] := If[LessEqual[m, 0.37], a, N[(k * N[(k * N[(a * 99.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;m \leq 0.37:\\
\;\;\;\;a\\
\mathbf{else}:\\
\;\;\;\;k \cdot \left(k \cdot \left(a \cdot 99\right)\right)\\
\end{array}
\end{array}
if m < 0.37Initial program 96.6%
Taylor expanded in k around 0
lower-*.f64N/A
lower-pow.f6471.9
Simplified71.9%
Taylor expanded in m around 0
Simplified28.8%
*-rgt-identity28.8
Applied egg-rr28.8%
if 0.37 < m Initial program 76.7%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f643.0
Simplified3.0%
Taylor expanded in k around 0
+-commutativeN/A
lower-fma.f64N/A
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
mul-1-negN/A
*-commutativeN/A
distribute-rgt1-inN/A
associate-*l*N/A
distribute-lft-neg-inN/A
lower-*.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-*.f6430.0
Simplified30.0%
Taylor expanded in k around inf
unpow2N/A
associate-*r*N/A
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f6451.4
Simplified51.4%
(FPCore (a k m) :precision binary64 (fma k (* a -10.0) a))
double code(double a, double k, double m) {
return fma(k, (a * -10.0), a);
}
function code(a, k, m) return fma(k, Float64(a * -10.0), a) end
code[a_, k_, m_] := N[(k * N[(a * -10.0), $MachinePrecision] + a), $MachinePrecision]
\begin{array}{l}
\\
\mathsf{fma}\left(k, a \cdot -10, a\right)
\end{array}
Initial program 89.6%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6449.6
Simplified49.6%
Taylor expanded in k around 0
+-commutativeN/A
lower-fma.f64N/A
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
mul-1-negN/A
*-commutativeN/A
distribute-rgt1-inN/A
associate-*l*N/A
distribute-lft-neg-inN/A
lower-*.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-*.f6428.6
Simplified28.6%
Taylor expanded in k around 0
*-commutativeN/A
lower-*.f6421.5
Simplified21.5%
(FPCore (a k m) :precision binary64 (fma a (* k -10.0) a))
double code(double a, double k, double m) {
return fma(a, (k * -10.0), a);
}
function code(a, k, m) return fma(a, Float64(k * -10.0), a) end
code[a_, k_, m_] := N[(a * N[(k * -10.0), $MachinePrecision] + a), $MachinePrecision]
\begin{array}{l}
\\
\mathsf{fma}\left(a, k \cdot -10, a\right)
\end{array}
Initial program 89.6%
Taylor expanded in m around 0
lower-/.f64N/A
unpow2N/A
distribute-rgt-inN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
*-lft-identityN/A
distribute-rgt-inN/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6449.6
Simplified49.6%
Taylor expanded in k around 0
+-commutativeN/A
*-commutativeN/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6421.5
Simplified21.5%
(FPCore (a k m) :precision binary64 a)
double code(double a, double k, double m) {
return a;
}
real(8) function code(a, k, m)
real(8), intent (in) :: a
real(8), intent (in) :: k
real(8), intent (in) :: m
code = a
end function
public static double code(double a, double k, double m) {
return a;
}
def code(a, k, m): return a
function code(a, k, m) return a end
function tmp = code(a, k, m) tmp = a; end
code[a_, k_, m_] := a
\begin{array}{l}
\\
a
\end{array}
Initial program 89.6%
Taylor expanded in k around 0
lower-*.f64N/A
lower-pow.f6481.8
Simplified81.8%
Taylor expanded in m around 0
Simplified20.0%
*-rgt-identity20.0
Applied egg-rr20.0%
herbie shell --seed 2024207
(FPCore (a k m)
:name "Falkner and Boettcher, Appendix A"
:precision binary64
(/ (* a (pow k m)) (+ (+ 1.0 (* 10.0 k)) (* k k))))