
(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 14 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 (<= (/ t_0 (+ (+ 1.0 (* k 10.0)) (* k k))) INFINITY)
(/ t_0 (fma (+ k 10.0) k 1.0))
(* (* k (* k k)) (* a (fma k 1e-6 -1e-5))))))
double code(double a, double k, double m) {
double t_0 = a * pow(k, m);
double tmp;
if ((t_0 / ((1.0 + (k * 10.0)) + (k * k))) <= ((double) INFINITY)) {
tmp = t_0 / fma((k + 10.0), k, 1.0);
} else {
tmp = (k * (k * k)) * (a * fma(k, 1e-6, -1e-5));
}
return tmp;
}
function code(a, k, m) t_0 = Float64(a * (k ^ m)) tmp = 0.0 if (Float64(t_0 / Float64(Float64(1.0 + Float64(k * 10.0)) + Float64(k * k))) <= Inf) tmp = Float64(t_0 / fma(Float64(k + 10.0), k, 1.0)); else tmp = Float64(Float64(k * Float64(k * k)) * Float64(a * fma(k, 1e-6, -1e-5))); end return tmp end
code[a_, k_, m_] := Block[{t$95$0 = N[(a * N[Power[k, m], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[N[(t$95$0 / N[(N[(1.0 + N[(k * 10.0), $MachinePrecision]), $MachinePrecision] + N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], Infinity], N[(t$95$0 / N[(N[(k + 10.0), $MachinePrecision] * k + 1.0), $MachinePrecision]), $MachinePrecision], N[(N[(k * N[(k * k), $MachinePrecision]), $MachinePrecision] * N[(a * N[(k * 1e-6 + -1e-5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := a \cdot {k}^{m}\\
\mathbf{if}\;\frac{t\_0}{\left(1 + k \cdot 10\right) + k \cdot k} \leq \infty:\\
\;\;\;\;\frac{t\_0}{\mathsf{fma}\left(k + 10, k, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\left(k \cdot \left(k \cdot k\right)\right) \cdot \left(a \cdot \mathsf{fma}\left(k, 10^{-6}, -1 \cdot 10^{-5}\right)\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))) < +inf.0Initial program 98.0%
lift-*.f64N/A
lift-*.f64N/A
associate-+l+N/A
+-commutativeN/A
lift-*.f64N/A
lift-*.f64N/A
distribute-rgt-outN/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-+.f6498.0
Applied egg-rr98.0%
if +inf.0 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) Initial program 0.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f641.6
Simplified1.6%
lift-+.f64N/A
*-commutativeN/A
lift-+.f64N/A
flip-+N/A
associate-*l/N/A
div-invN/A
lower-fma.f64N/A
lower-*.f64N/A
sub-negN/A
lower-fma.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-/.f64N/A
sub-negN/A
metadata-evalN/A
lower-+.f641.6
Applied egg-rr1.6%
Taylor expanded in k around -inf
associate-*r/N/A
mul-1-negN/A
sub-negN/A
metadata-evalN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
metadata-evalN/A
lower-/.f64N/A
Simplified1.6%
Taylor expanded in k around 0
lower-*.f64N/A
cube-multN/A
unpow2N/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-fma.f64100.0
Simplified100.0%
Final simplification98.2%
(FPCore (a k m)
:precision binary64
(let* ((t_0 (/ (* a (pow k m)) (+ (+ 1.0 (* k 10.0)) (* k k)))))
(if (<= t_0 2e-298)
(/ a (* k (+ k 10.0)))
(if (<= t_0 1e+287)
(/ a (fma k 10.0 1.0))
(if (<= t_0 INFINITY)
(/ a (* k k))
(fma k (* a (fma k 99.0 -10.0)) a))))))
double code(double a, double k, double m) {
double t_0 = (a * pow(k, m)) / ((1.0 + (k * 10.0)) + (k * k));
double tmp;
if (t_0 <= 2e-298) {
tmp = a / (k * (k + 10.0));
} else if (t_0 <= 1e+287) {
tmp = a / fma(k, 10.0, 1.0);
} else if (t_0 <= ((double) INFINITY)) {
tmp = a / (k * k);
} else {
tmp = fma(k, (a * fma(k, 99.0, -10.0)), a);
}
return tmp;
}
function code(a, k, m) t_0 = Float64(Float64(a * (k ^ m)) / Float64(Float64(1.0 + Float64(k * 10.0)) + Float64(k * k))) tmp = 0.0 if (t_0 <= 2e-298) tmp = Float64(a / Float64(k * Float64(k + 10.0))); elseif (t_0 <= 1e+287) tmp = Float64(a / fma(k, 10.0, 1.0)); elseif (t_0 <= Inf) tmp = Float64(a / Float64(k * k)); else tmp = fma(k, Float64(a * fma(k, 99.0, -10.0)), a); end return tmp end
code[a_, k_, m_] := Block[{t$95$0 = N[(N[(a * N[Power[k, m], $MachinePrecision]), $MachinePrecision] / N[(N[(1.0 + N[(k * 10.0), $MachinePrecision]), $MachinePrecision] + N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, 2e-298], N[(a / N[(k * N[(k + 10.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$0, 1e+287], N[(a / N[(k * 10.0 + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$0, Infinity], N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision], N[(k * N[(a * N[(k * 99.0 + -10.0), $MachinePrecision]), $MachinePrecision] + a), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{a \cdot {k}^{m}}{\left(1 + k \cdot 10\right) + k \cdot k}\\
\mathbf{if}\;t\_0 \leq 2 \cdot 10^{-298}:\\
\;\;\;\;\frac{a}{k \cdot \left(k + 10\right)}\\
\mathbf{elif}\;t\_0 \leq 10^{+287}:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, 10, 1\right)}\\
\mathbf{elif}\;t\_0 \leq \infty:\\
\;\;\;\;\frac{a}{k \cdot k}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(k, a \cdot \mathsf{fma}\left(k, 99, -10\right), a\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))) < 1.99999999999999982e-298Initial program 97.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6445.1
Simplified45.1%
Taylor expanded in k around inf
unpow2N/A
associate-*l*N/A
lower-*.f64N/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6435.9
Simplified35.9%
if 1.99999999999999982e-298 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) < 1.0000000000000001e287Initial program 99.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6499.5
Simplified99.5%
Taylor expanded in k around 0
Simplified76.5%
if 1.0000000000000001e287 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) < +inf.0Initial 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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f643.7
Simplified3.7%
Taylor expanded in k around inf
lower-/.f64N/A
unpow2N/A
lower-*.f6449.9
Simplified49.9%
if +inf.0 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) Initial program 0.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f641.6
Simplified1.6%
lift-+.f64N/A
*-commutativeN/A
lift-+.f64N/A
flip-+N/A
associate-*l/N/A
div-invN/A
lower-fma.f64N/A
lower-*.f64N/A
sub-negN/A
lower-fma.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-/.f64N/A
sub-negN/A
metadata-evalN/A
lower-+.f641.6
Applied egg-rr1.6%
Taylor expanded in k around 0
+-commutativeN/A
lower-fma.f64N/A
associate-*r*N/A
distribute-rgt1-inN/A
associate-*r*N/A
distribute-rgt-out--N/A
lower-*.f64N/A
sub-negN/A
metadata-evalN/A
*-commutativeN/A
associate-*l*N/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
lower-fma.f64N/A
metadata-evalN/A
metadata-eval79.2
Simplified79.2%
Final simplification43.7%
(FPCore (a k m)
:precision binary64
(let* ((t_0 (/ a (* k k)))
(t_1 (/ (* a (pow k m)) (+ (+ 1.0 (* k 10.0)) (* k k)))))
(if (<= t_1 0.0)
t_0
(if (<= t_1 1e+287)
(/ a (fma k 10.0 1.0))
(if (<= t_1 INFINITY) t_0 (fma k (* a (fma k 99.0 -10.0)) a))))))
double code(double a, double k, double m) {
double t_0 = a / (k * k);
double t_1 = (a * pow(k, m)) / ((1.0 + (k * 10.0)) + (k * k));
double tmp;
if (t_1 <= 0.0) {
tmp = t_0;
} else if (t_1 <= 1e+287) {
tmp = a / fma(k, 10.0, 1.0);
} else if (t_1 <= ((double) INFINITY)) {
tmp = t_0;
} else {
tmp = fma(k, (a * fma(k, 99.0, -10.0)), a);
}
return tmp;
}
function code(a, k, m) t_0 = Float64(a / Float64(k * k)) t_1 = Float64(Float64(a * (k ^ m)) / Float64(Float64(1.0 + Float64(k * 10.0)) + Float64(k * k))) tmp = 0.0 if (t_1 <= 0.0) tmp = t_0; elseif (t_1 <= 1e+287) tmp = Float64(a / fma(k, 10.0, 1.0)); elseif (t_1 <= Inf) tmp = t_0; else tmp = fma(k, Float64(a * fma(k, 99.0, -10.0)), a); end return tmp end
code[a_, k_, m_] := Block[{t$95$0 = N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(a * N[Power[k, m], $MachinePrecision]), $MachinePrecision] / N[(N[(1.0 + N[(k * 10.0), $MachinePrecision]), $MachinePrecision] + N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, 0.0], t$95$0, If[LessEqual[t$95$1, 1e+287], N[(a / N[(k * 10.0 + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, Infinity], t$95$0, N[(k * N[(a * N[(k * 99.0 + -10.0), $MachinePrecision]), $MachinePrecision] + a), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{a}{k \cdot k}\\
t_1 := \frac{a \cdot {k}^{m}}{\left(1 + k \cdot 10\right) + k \cdot k}\\
\mathbf{if}\;t\_1 \leq 0:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 10^{+287}:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, 10, 1\right)}\\
\mathbf{elif}\;t\_1 \leq \infty:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(k, a \cdot \mathsf{fma}\left(k, 99, -10\right), a\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.0 or 1.0000000000000001e287 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) < +inf.0Initial program 97.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6439.4
Simplified39.4%
Taylor expanded in k around inf
lower-/.f64N/A
unpow2N/A
lower-*.f6439.5
Simplified39.5%
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))) < 1.0000000000000001e287Initial 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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6499.5
Simplified99.5%
Taylor expanded in k around 0
Simplified73.1%
if +inf.0 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) Initial program 0.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f641.6
Simplified1.6%
lift-+.f64N/A
*-commutativeN/A
lift-+.f64N/A
flip-+N/A
associate-*l/N/A
div-invN/A
lower-fma.f64N/A
lower-*.f64N/A
sub-negN/A
lower-fma.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-/.f64N/A
sub-negN/A
metadata-evalN/A
lower-+.f641.6
Applied egg-rr1.6%
Taylor expanded in k around 0
+-commutativeN/A
lower-fma.f64N/A
associate-*r*N/A
distribute-rgt1-inN/A
associate-*r*N/A
distribute-rgt-out--N/A
lower-*.f64N/A
sub-negN/A
metadata-evalN/A
*-commutativeN/A
associate-*l*N/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
lower-fma.f64N/A
metadata-evalN/A
metadata-eval79.2
Simplified79.2%
Final simplification45.0%
(FPCore (a k m)
:precision binary64
(let* ((t_0 (/ a (* k k)))
(t_1 (/ (* a (pow k m)) (+ (+ 1.0 (* k 10.0)) (* k k)))))
(if (<= t_1 0.0)
t_0
(if (<= t_1 1e+287)
(/ a (fma k 10.0 1.0))
(if (<= t_1 INFINITY) t_0 (fma a (* k -10.0) a))))))
double code(double a, double k, double m) {
double t_0 = a / (k * k);
double t_1 = (a * pow(k, m)) / ((1.0 + (k * 10.0)) + (k * k));
double tmp;
if (t_1 <= 0.0) {
tmp = t_0;
} else if (t_1 <= 1e+287) {
tmp = a / fma(k, 10.0, 1.0);
} else if (t_1 <= ((double) INFINITY)) {
tmp = t_0;
} else {
tmp = fma(a, (k * -10.0), a);
}
return tmp;
}
function code(a, k, m) t_0 = Float64(a / Float64(k * k)) t_1 = Float64(Float64(a * (k ^ m)) / Float64(Float64(1.0 + Float64(k * 10.0)) + Float64(k * k))) tmp = 0.0 if (t_1 <= 0.0) tmp = t_0; elseif (t_1 <= 1e+287) tmp = Float64(a / fma(k, 10.0, 1.0)); elseif (t_1 <= Inf) tmp = t_0; else tmp = fma(a, Float64(k * -10.0), a); end return tmp end
code[a_, k_, m_] := Block[{t$95$0 = N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(a * N[Power[k, m], $MachinePrecision]), $MachinePrecision] / N[(N[(1.0 + N[(k * 10.0), $MachinePrecision]), $MachinePrecision] + N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, 0.0], t$95$0, If[LessEqual[t$95$1, 1e+287], N[(a / N[(k * 10.0 + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, Infinity], t$95$0, N[(a * N[(k * -10.0), $MachinePrecision] + a), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{a}{k \cdot k}\\
t_1 := \frac{a \cdot {k}^{m}}{\left(1 + k \cdot 10\right) + k \cdot k}\\
\mathbf{if}\;t\_1 \leq 0:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 10^{+287}:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, 10, 1\right)}\\
\mathbf{elif}\;t\_1 \leq \infty:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(a, k \cdot -10, a\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.0 or 1.0000000000000001e287 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) < +inf.0Initial program 97.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6439.4
Simplified39.4%
Taylor expanded in k around inf
lower-/.f64N/A
unpow2N/A
lower-*.f6439.5
Simplified39.5%
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))) < 1.0000000000000001e287Initial 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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6499.5
Simplified99.5%
Taylor expanded in k around 0
Simplified73.1%
if +inf.0 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) Initial program 0.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f641.6
Simplified1.6%
Taylor expanded in k around 0
+-commutativeN/A
*-commutativeN/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6434.3
Simplified34.3%
Final simplification41.9%
(FPCore (a k m)
:precision binary64
(let* ((t_0 (/ a (* k k)))
(t_1 (/ (* a (pow k m)) (+ (+ 1.0 (* k 10.0)) (* k k))))
(t_2 (fma a (* k -10.0) a)))
(if (<= t_1 2e-298)
t_0
(if (<= t_1 1e+287) t_2 (if (<= t_1 INFINITY) t_0 t_2)))))
double code(double a, double k, double m) {
double t_0 = a / (k * k);
double t_1 = (a * pow(k, m)) / ((1.0 + (k * 10.0)) + (k * k));
double t_2 = fma(a, (k * -10.0), a);
double tmp;
if (t_1 <= 2e-298) {
tmp = t_0;
} else if (t_1 <= 1e+287) {
tmp = t_2;
} else if (t_1 <= ((double) INFINITY)) {
tmp = t_0;
} else {
tmp = t_2;
}
return tmp;
}
function code(a, k, m) t_0 = Float64(a / Float64(k * k)) t_1 = Float64(Float64(a * (k ^ m)) / Float64(Float64(1.0 + Float64(k * 10.0)) + Float64(k * k))) t_2 = fma(a, Float64(k * -10.0), a) tmp = 0.0 if (t_1 <= 2e-298) tmp = t_0; elseif (t_1 <= 1e+287) tmp = t_2; elseif (t_1 <= Inf) tmp = t_0; else tmp = t_2; end return tmp end
code[a_, k_, m_] := Block[{t$95$0 = N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(a * N[Power[k, m], $MachinePrecision]), $MachinePrecision] / N[(N[(1.0 + N[(k * 10.0), $MachinePrecision]), $MachinePrecision] + N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(a * N[(k * -10.0), $MachinePrecision] + a), $MachinePrecision]}, If[LessEqual[t$95$1, 2e-298], t$95$0, If[LessEqual[t$95$1, 1e+287], t$95$2, If[LessEqual[t$95$1, Infinity], t$95$0, t$95$2]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{a}{k \cdot k}\\
t_1 := \frac{a \cdot {k}^{m}}{\left(1 + k \cdot 10\right) + k \cdot k}\\
t_2 := \mathsf{fma}\left(a, k \cdot -10, a\right)\\
\mathbf{if}\;t\_1 \leq 2 \cdot 10^{-298}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 10^{+287}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;t\_1 \leq \infty:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\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))) < 1.99999999999999982e-298 or 1.0000000000000001e287 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) < +inf.0Initial program 97.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6439.6
Simplified39.6%
Taylor expanded in k around inf
lower-/.f64N/A
unpow2N/A
lower-*.f6439.8
Simplified39.8%
if 1.99999999999999982e-298 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) < 1.0000000000000001e287 or +inf.0 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) Initial program 52.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6453.1
Simplified53.1%
Taylor expanded in k around 0
+-commutativeN/A
*-commutativeN/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6455.5
Simplified55.5%
Final simplification42.1%
(FPCore (a k m) :precision binary64 (if (<= (/ (* a (pow k m)) (+ (+ 1.0 (* k 10.0)) (* k k))) INFINITY) (* a (/ (pow k m) (fma k (+ k 10.0) 1.0))) (* (* k (* k k)) (* a (fma k 1e-6 -1e-5)))))
double code(double a, double k, double m) {
double tmp;
if (((a * pow(k, m)) / ((1.0 + (k * 10.0)) + (k * k))) <= ((double) INFINITY)) {
tmp = a * (pow(k, m) / fma(k, (k + 10.0), 1.0));
} else {
tmp = (k * (k * k)) * (a * fma(k, 1e-6, -1e-5));
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (Float64(Float64(a * (k ^ m)) / Float64(Float64(1.0 + Float64(k * 10.0)) + Float64(k * k))) <= Inf) tmp = Float64(a * Float64((k ^ m) / fma(k, Float64(k + 10.0), 1.0))); else tmp = Float64(Float64(k * Float64(k * k)) * Float64(a * fma(k, 1e-6, -1e-5))); end return tmp end
code[a_, k_, m_] := If[LessEqual[N[(N[(a * N[Power[k, m], $MachinePrecision]), $MachinePrecision] / N[(N[(1.0 + N[(k * 10.0), $MachinePrecision]), $MachinePrecision] + N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], Infinity], N[(a * N[(N[Power[k, m], $MachinePrecision] / N[(k * N[(k + 10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(k * N[(k * k), $MachinePrecision]), $MachinePrecision] * N[(a * N[(k * 1e-6 + -1e-5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\frac{a \cdot {k}^{m}}{\left(1 + k \cdot 10\right) + k \cdot k} \leq \infty:\\
\;\;\;\;a \cdot \frac{{k}^{m}}{\mathsf{fma}\left(k, k + 10, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\left(k \cdot \left(k \cdot k\right)\right) \cdot \left(a \cdot \mathsf{fma}\left(k, 10^{-6}, -1 \cdot 10^{-5}\right)\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))) < +inf.0Initial program 98.0%
lift-pow.f64N/A
lift-*.f64N/A
lift-+.f64N/A
lift-*.f64N/A
lift-+.f64N/A
*-commutativeN/A
associate-*l/N/A
lower-*.f64N/A
lower-/.f6498.0
lift-+.f64N/A
lift-+.f64N/A
associate-+l+N/A
+-commutativeN/A
lift-*.f64N/A
lift-*.f64N/A
distribute-rgt-outN/A
lower-fma.f64N/A
+-commutativeN/A
lower-+.f6498.0
Applied egg-rr98.0%
if +inf.0 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) Initial program 0.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f641.6
Simplified1.6%
lift-+.f64N/A
*-commutativeN/A
lift-+.f64N/A
flip-+N/A
associate-*l/N/A
div-invN/A
lower-fma.f64N/A
lower-*.f64N/A
sub-negN/A
lower-fma.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-/.f64N/A
sub-negN/A
metadata-evalN/A
lower-+.f641.6
Applied egg-rr1.6%
Taylor expanded in k around -inf
associate-*r/N/A
mul-1-negN/A
sub-negN/A
metadata-evalN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
metadata-evalN/A
lower-/.f64N/A
Simplified1.6%
Taylor expanded in k around 0
lower-*.f64N/A
cube-multN/A
unpow2N/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-fma.f64100.0
Simplified100.0%
Final simplification98.2%
(FPCore (a k m) :precision binary64 (if (<= (/ (* a (pow k m)) (+ (+ 1.0 (* k 10.0)) (* k k))) 0.0) (/ a (* k 10.0)) (fma a (* k -10.0) a)))
double code(double a, double k, double m) {
double tmp;
if (((a * pow(k, m)) / ((1.0 + (k * 10.0)) + (k * k))) <= 0.0) {
tmp = a / (k * 10.0);
} else {
tmp = fma(a, (k * -10.0), a);
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (Float64(Float64(a * (k ^ m)) / Float64(Float64(1.0 + Float64(k * 10.0)) + Float64(k * k))) <= 0.0) tmp = Float64(a / Float64(k * 10.0)); else tmp = fma(a, Float64(k * -10.0), a); end return tmp end
code[a_, k_, m_] := If[LessEqual[N[(N[(a * N[Power[k, m], $MachinePrecision]), $MachinePrecision] / N[(N[(1.0 + N[(k * 10.0), $MachinePrecision]), $MachinePrecision] + N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 0.0], N[(a / N[(k * 10.0), $MachinePrecision]), $MachinePrecision], N[(a * N[(k * -10.0), $MachinePrecision] + a), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\frac{a \cdot {k}^{m}}{\left(1 + k \cdot 10\right) + k \cdot k} \leq 0:\\
\;\;\;\;\frac{a}{k \cdot 10}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(a, k \cdot -10, a\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 97.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6444.8
Simplified44.8%
Taylor expanded in k around inf
unpow2N/A
associate-*l*N/A
lower-*.f64N/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6435.5
Simplified35.5%
Taylor expanded in k around 0
*-commutativeN/A
lower-*.f6415.9
Simplified15.9%
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))) Initial program 73.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6432.7
Simplified32.7%
Taylor expanded in k around 0
+-commutativeN/A
*-commutativeN/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6435.6
Simplified35.6%
Final simplification21.1%
(FPCore (a k m)
:precision binary64
(let* ((t_0 (* a (pow k m))))
(if (<= m -4.6e-5)
t_0
(if (<= m 1.02e-44) (/ 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 <= -4.6e-5) {
tmp = t_0;
} else if (m <= 1.02e-44) {
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 <= -4.6e-5) tmp = t_0; elseif (m <= 1.02e-44) 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, -4.6e-5], t$95$0, If[LessEqual[m, 1.02e-44], 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 -4.6 \cdot 10^{-5}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;m \leq 1.02 \cdot 10^{-44}:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, k + 10, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if m < -4.6e-5 or 1.0199999999999999e-44 < m Initial program 89.8%
Taylor expanded in k around 0
lower-*.f64N/A
lower-pow.f64100.0
Simplified100.0%
if -4.6e-5 < m < 1.0199999999999999e-44Initial program 94.1%
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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6494.0
Simplified94.0%
(FPCore (a k m)
:precision binary64
(let* ((t_0 (* k (* k k))))
(if (<= m -3.7e+20)
(* a (/ 100.0 (* k t_0)))
(if (<= m 1.65)
(/ a (fma k (+ k 10.0) 1.0))
(* t_0 (* a (fma k 1e-6 -1e-5)))))))
double code(double a, double k, double m) {
double t_0 = k * (k * k);
double tmp;
if (m <= -3.7e+20) {
tmp = a * (100.0 / (k * t_0));
} else if (m <= 1.65) {
tmp = a / fma(k, (k + 10.0), 1.0);
} else {
tmp = t_0 * (a * fma(k, 1e-6, -1e-5));
}
return tmp;
}
function code(a, k, m) t_0 = Float64(k * Float64(k * k)) tmp = 0.0 if (m <= -3.7e+20) tmp = Float64(a * Float64(100.0 / Float64(k * t_0))); elseif (m <= 1.65) tmp = Float64(a / fma(k, Float64(k + 10.0), 1.0)); else tmp = Float64(t_0 * Float64(a * fma(k, 1e-6, -1e-5))); end return tmp end
code[a_, k_, m_] := Block[{t$95$0 = N[(k * N[(k * k), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[m, -3.7e+20], N[(a * N[(100.0 / N[(k * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 1.65], N[(a / N[(k * N[(k + 10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(t$95$0 * N[(a * N[(k * 1e-6 + -1e-5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := k \cdot \left(k \cdot k\right)\\
\mathbf{if}\;m \leq -3.7 \cdot 10^{+20}:\\
\;\;\;\;a \cdot \frac{100}{k \cdot t\_0}\\
\mathbf{elif}\;m \leq 1.65:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, k + 10, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;t\_0 \cdot \left(a \cdot \mathsf{fma}\left(k, 10^{-6}, -1 \cdot 10^{-5}\right)\right)\\
\end{array}
\end{array}
if m < -3.7e20Initial 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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6432.7
Simplified32.7%
Taylor expanded in k around inf
unpow2N/A
associate-*l*N/A
lower-*.f64N/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
*-lft-identityN/A
lower-+.f6442.7
Simplified42.7%
Taylor expanded in k around inf
metadata-evalN/A
cancel-sign-sub-invN/A
associate--r+N/A
lower-/.f64N/A
Simplified64.8%
Taylor expanded in k around 0
associate-*r/N/A
*-commutativeN/A
associate-/l*N/A
lower-*.f64N/A
lower-/.f64N/A
metadata-evalN/A
pow-plusN/A
lower-*.f64N/A
cube-multN/A
unpow2N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6472.8
Simplified72.8%
if -3.7e20 < m < 1.6499999999999999Initial program 94.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6493.3
Simplified93.3%
if 1.6499999999999999 < m Initial program 80.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f642.9
Simplified2.9%
lift-+.f64N/A
*-commutativeN/A
lift-+.f64N/A
flip-+N/A
associate-*l/N/A
div-invN/A
lower-fma.f64N/A
lower-*.f64N/A
sub-negN/A
lower-fma.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-/.f64N/A
sub-negN/A
metadata-evalN/A
lower-+.f642.9
Applied egg-rr2.9%
Taylor expanded in k around -inf
associate-*r/N/A
mul-1-negN/A
sub-negN/A
metadata-evalN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
metadata-evalN/A
lower-/.f64N/A
Simplified48.1%
Taylor expanded in k around 0
lower-*.f64N/A
cube-multN/A
unpow2N/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-fma.f6480.2
Simplified80.2%
Final simplification82.1%
(FPCore (a k m)
:precision binary64
(if (<= m -6.8e+24)
(/ a (* k k))
(if (<= m 1.65)
(/ a (fma k (+ k 10.0) 1.0))
(* (* k (* k k)) (* a (fma k 1e-6 -1e-5))))))
double code(double a, double k, double m) {
double tmp;
if (m <= -6.8e+24) {
tmp = a / (k * k);
} else if (m <= 1.65) {
tmp = a / fma(k, (k + 10.0), 1.0);
} else {
tmp = (k * (k * k)) * (a * fma(k, 1e-6, -1e-5));
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (m <= -6.8e+24) tmp = Float64(a / Float64(k * k)); elseif (m <= 1.65) tmp = Float64(a / fma(k, Float64(k + 10.0), 1.0)); else tmp = Float64(Float64(k * Float64(k * k)) * Float64(a * fma(k, 1e-6, -1e-5))); end return tmp end
code[a_, k_, m_] := If[LessEqual[m, -6.8e+24], N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 1.65], N[(a / N[(k * N[(k + 10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(N[(k * N[(k * k), $MachinePrecision]), $MachinePrecision] * N[(a * N[(k * 1e-6 + -1e-5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;m \leq -6.8 \cdot 10^{+24}:\\
\;\;\;\;\frac{a}{k \cdot k}\\
\mathbf{elif}\;m \leq 1.65:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, k + 10, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\left(k \cdot \left(k \cdot k\right)\right) \cdot \left(a \cdot \mathsf{fma}\left(k, 10^{-6}, -1 \cdot 10^{-5}\right)\right)\\
\end{array}
\end{array}
if m < -6.8000000000000001e24Initial 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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6433.1
Simplified33.1%
Taylor expanded in k around inf
lower-/.f64N/A
unpow2N/A
lower-*.f6460.7
Simplified60.7%
if -6.8000000000000001e24 < m < 1.6499999999999999Initial program 94.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6492.2
Simplified92.2%
if 1.6499999999999999 < m Initial program 80.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f642.9
Simplified2.9%
lift-+.f64N/A
*-commutativeN/A
lift-+.f64N/A
flip-+N/A
associate-*l/N/A
div-invN/A
lower-fma.f64N/A
lower-*.f64N/A
sub-negN/A
lower-fma.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-/.f64N/A
sub-negN/A
metadata-evalN/A
lower-+.f642.9
Applied egg-rr2.9%
Taylor expanded in k around -inf
associate-*r/N/A
mul-1-negN/A
sub-negN/A
metadata-evalN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
metadata-evalN/A
lower-/.f64N/A
Simplified48.1%
Taylor expanded in k around 0
lower-*.f64N/A
cube-multN/A
unpow2N/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
associate-*l*N/A
*-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-fma.f6480.2
Simplified80.2%
(FPCore (a k m)
:precision binary64
(if (<= m -6.8e+24)
(/ a (* k k))
(if (<= m 1.65)
(/ a (fma k (+ k 10.0) 1.0))
(* a (* (* k (* k k)) -1e-5)))))
double code(double a, double k, double m) {
double tmp;
if (m <= -6.8e+24) {
tmp = a / (k * k);
} else if (m <= 1.65) {
tmp = a / fma(k, (k + 10.0), 1.0);
} else {
tmp = a * ((k * (k * k)) * -1e-5);
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (m <= -6.8e+24) tmp = Float64(a / Float64(k * k)); elseif (m <= 1.65) tmp = Float64(a / fma(k, Float64(k + 10.0), 1.0)); else tmp = Float64(a * Float64(Float64(k * Float64(k * k)) * -1e-5)); end return tmp end
code[a_, k_, m_] := If[LessEqual[m, -6.8e+24], N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 1.65], N[(a / N[(k * N[(k + 10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(a * N[(N[(k * N[(k * k), $MachinePrecision]), $MachinePrecision] * -1e-5), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;m \leq -6.8 \cdot 10^{+24}:\\
\;\;\;\;\frac{a}{k \cdot k}\\
\mathbf{elif}\;m \leq 1.65:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, k + 10, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;a \cdot \left(\left(k \cdot \left(k \cdot k\right)\right) \cdot -1 \cdot 10^{-5}\right)\\
\end{array}
\end{array}
if m < -6.8000000000000001e24Initial 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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6433.1
Simplified33.1%
Taylor expanded in k around inf
lower-/.f64N/A
unpow2N/A
lower-*.f6460.7
Simplified60.7%
if -6.8000000000000001e24 < m < 1.6499999999999999Initial program 94.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6492.2
Simplified92.2%
if 1.6499999999999999 < m Initial program 80.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f642.9
Simplified2.9%
lift-+.f64N/A
*-commutativeN/A
lift-+.f64N/A
flip-+N/A
associate-*l/N/A
div-invN/A
lower-fma.f64N/A
lower-*.f64N/A
sub-negN/A
lower-fma.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-/.f64N/A
sub-negN/A
metadata-evalN/A
lower-+.f642.9
Applied egg-rr2.9%
Taylor expanded in k around -inf
associate-*r/N/A
mul-1-negN/A
sub-negN/A
metadata-evalN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
metadata-evalN/A
lower-/.f64N/A
Simplified48.1%
Taylor expanded in k around 0
associate-*r*N/A
*-commutativeN/A
associate-*l*N/A
lower-*.f64N/A
lower-*.f64N/A
cube-multN/A
unpow2N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6466.0
Simplified66.0%
Final simplification72.9%
(FPCore (a k m) :precision binary64 (if (<= m -2.15e-30) (/ a (* k k)) (if (<= m 1.65) (/ a (fma k 10.0 1.0)) (* a (* (* k (* k k)) -1e-5)))))
double code(double a, double k, double m) {
double tmp;
if (m <= -2.15e-30) {
tmp = a / (k * k);
} else if (m <= 1.65) {
tmp = a / fma(k, 10.0, 1.0);
} else {
tmp = a * ((k * (k * k)) * -1e-5);
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (m <= -2.15e-30) tmp = Float64(a / Float64(k * k)); elseif (m <= 1.65) tmp = Float64(a / fma(k, 10.0, 1.0)); else tmp = Float64(a * Float64(Float64(k * Float64(k * k)) * -1e-5)); end return tmp end
code[a_, k_, m_] := If[LessEqual[m, -2.15e-30], N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 1.65], N[(a / N[(k * 10.0 + 1.0), $MachinePrecision]), $MachinePrecision], N[(a * N[(N[(k * N[(k * k), $MachinePrecision]), $MachinePrecision] * -1e-5), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;m \leq -2.15 \cdot 10^{-30}:\\
\;\;\;\;\frac{a}{k \cdot k}\\
\mathbf{elif}\;m \leq 1.65:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, 10, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;a \cdot \left(\left(k \cdot \left(k \cdot k\right)\right) \cdot -1 \cdot 10^{-5}\right)\\
\end{array}
\end{array}
if m < -2.14999999999999983e-30Initial program 98.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6435.9
Simplified35.9%
Taylor expanded in k around inf
lower-/.f64N/A
unpow2N/A
lower-*.f6459.1
Simplified59.1%
if -2.14999999999999983e-30 < m < 1.6499999999999999Initial program 95.1%
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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6495.1
Simplified95.1%
Taylor expanded in k around 0
Simplified60.4%
if 1.6499999999999999 < m Initial program 80.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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f642.9
Simplified2.9%
lift-+.f64N/A
*-commutativeN/A
lift-+.f64N/A
flip-+N/A
associate-*l/N/A
div-invN/A
lower-fma.f64N/A
lower-*.f64N/A
sub-negN/A
lower-fma.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-/.f64N/A
sub-negN/A
metadata-evalN/A
lower-+.f642.9
Applied egg-rr2.9%
Taylor expanded in k around -inf
associate-*r/N/A
mul-1-negN/A
sub-negN/A
metadata-evalN/A
distribute-neg-inN/A
mul-1-negN/A
remove-double-negN/A
metadata-evalN/A
lower-/.f64N/A
Simplified48.1%
Taylor expanded in k around 0
associate-*r*N/A
*-commutativeN/A
associate-*l*N/A
lower-*.f64N/A
lower-*.f64N/A
cube-multN/A
unpow2N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6466.0
Simplified66.0%
Final simplification62.0%
(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 91.1%
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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6441.6
Simplified41.6%
Taylor expanded in k around 0
+-commutativeN/A
*-commutativeN/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6419.6
Simplified19.6%
(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 91.1%
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
distribute-rgt-inN/A
*-lft-identityN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-+.f6441.6
Simplified41.6%
Taylor expanded in k around 0
Simplified17.1%
/-rgt-identity17.1
Applied egg-rr17.1%
herbie shell --seed 2024219
(FPCore (a k m)
:name "Falkner and Boettcher, Appendix A"
:precision binary64
(/ (* a (pow k m)) (+ (+ 1.0 (* 10.0 k)) (* k k))))