
(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 (* (pow k m) a)))
(if (<= k 1e-18)
t_0
(/ 1.0 (fma k (+ (/ k t_0) (/ 10.0 t_0)) (/ 1.0 t_0))))))
double code(double a, double k, double m) {
double t_0 = pow(k, m) * a;
double tmp;
if (k <= 1e-18) {
tmp = t_0;
} else {
tmp = 1.0 / fma(k, ((k / t_0) + (10.0 / t_0)), (1.0 / t_0));
}
return tmp;
}
function code(a, k, m) t_0 = Float64((k ^ m) * a) tmp = 0.0 if (k <= 1e-18) tmp = t_0; else tmp = Float64(1.0 / fma(k, Float64(Float64(k / t_0) + Float64(10.0 / t_0)), Float64(1.0 / t_0))); end return tmp end
code[a_, k_, m_] := Block[{t$95$0 = N[(N[Power[k, m], $MachinePrecision] * a), $MachinePrecision]}, If[LessEqual[k, 1e-18], t$95$0, N[(1.0 / N[(k * N[(N[(k / t$95$0), $MachinePrecision] + N[(10.0 / t$95$0), $MachinePrecision]), $MachinePrecision] + N[(1.0 / t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := {k}^{m} \cdot a\\
\mathbf{if}\;k \leq 10^{-18}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\mathsf{fma}\left(k, \frac{k}{t\_0} + \frac{10}{t\_0}, \frac{1}{t\_0}\right)}\\
\end{array}
\end{array}
if k < 1.0000000000000001e-18Initial program 97.0%
associate-/l*N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
pow-lowering-pow.f64N/A
associate-+l+N/A
+-commutativeN/A
distribute-rgt-outN/A
accelerator-lowering-fma.f64N/A
+-lowering-+.f6497.0
Applied egg-rr97.0%
Taylor expanded in k around 0
pow-lowering-pow.f64100.0
Simplified100.0%
if 1.0000000000000001e-18 < k Initial program 77.3%
clear-numN/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
associate-+l+N/A
+-commutativeN/A
distribute-rgt-outN/A
accelerator-lowering-fma.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
pow-lowering-pow.f6477.3
Applied egg-rr77.3%
Taylor expanded in k around 0
accelerator-lowering-fma.f64N/A
+-commutativeN/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
pow-lowering-pow.f64N/A
associate-*r/N/A
metadata-evalN/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
pow-lowering-pow.f6499.9
Simplified99.9%
(FPCore (a k m) :precision binary64 (let* ((t_0 (/ (* (pow k m) a) (+ (+ 1.0 (* k 10.0)) (* k k))))) (if (<= t_0 INFINITY) t_0 (* a (fma k (fma k 99.0 -10.0) 1.0)))))
double code(double a, double k, double m) {
double t_0 = (pow(k, m) * a) / ((1.0 + (k * 10.0)) + (k * k));
double tmp;
if (t_0 <= ((double) INFINITY)) {
tmp = t_0;
} else {
tmp = a * fma(k, fma(k, 99.0, -10.0), 1.0);
}
return tmp;
}
function code(a, k, m) t_0 = Float64(Float64((k ^ m) * a) / Float64(Float64(1.0 + Float64(k * 10.0)) + Float64(k * k))) tmp = 0.0 if (t_0 <= Inf) tmp = t_0; else tmp = Float64(a * fma(k, fma(k, 99.0, -10.0), 1.0)); end return tmp end
code[a_, k_, m_] := Block[{t$95$0 = N[(N[(N[Power[k, m], $MachinePrecision] * a), $MachinePrecision] / N[(N[(1.0 + N[(k * 10.0), $MachinePrecision]), $MachinePrecision] + N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, Infinity], t$95$0, N[(a * N[(k * N[(k * 99.0 + -10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{{k}^{m} \cdot a}{\left(1 + k \cdot 10\right) + k \cdot k}\\
\mathbf{if}\;t\_0 \leq \infty:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;a \cdot \mathsf{fma}\left(k, \mathsf{fma}\left(k, 99, -10\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))) < +inf.0Initial program 97.2%
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
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f641.6
Simplified1.6%
clear-numN/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
accelerator-lowering-fma.f64N/A
+-commutativeN/A
+-lowering-+.f641.6
Applied egg-rr1.6%
Taylor expanded in k around 0
+-commutativeN/A
accelerator-lowering-fma.f64N/A
sub-negN/A
*-commutativeN/A
metadata-evalN/A
accelerator-lowering-fma.f64100.0
Simplified100.0%
Final simplification97.4%
(FPCore (a k m) :precision binary64 (if (<= (/ (* (pow k m) a) (+ (+ 1.0 (* k 10.0)) (* k k))) INFINITY) (* a (/ (pow k m) (fma k (+ k 10.0) 1.0))) (* a (fma k (fma k 99.0 -10.0) 1.0))))
double code(double a, double k, double m) {
double tmp;
if (((pow(k, m) * a) / ((1.0 + (k * 10.0)) + (k * k))) <= ((double) INFINITY)) {
tmp = a * (pow(k, m) / fma(k, (k + 10.0), 1.0));
} else {
tmp = a * fma(k, fma(k, 99.0, -10.0), 1.0);
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (Float64(Float64((k ^ m) * a) / 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(a * fma(k, fma(k, 99.0, -10.0), 1.0)); end return tmp end
code[a_, k_, m_] := If[LessEqual[N[(N[(N[Power[k, m], $MachinePrecision] * a), $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[(a * N[(k * N[(k * 99.0 + -10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\frac{{k}^{m} \cdot a}{\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}:\\
\;\;\;\;a \cdot \mathsf{fma}\left(k, \mathsf{fma}\left(k, 99, -10\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))) < +inf.0Initial program 97.2%
associate-/l*N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
pow-lowering-pow.f64N/A
associate-+l+N/A
+-commutativeN/A
distribute-rgt-outN/A
accelerator-lowering-fma.f64N/A
+-lowering-+.f6497.2
Applied egg-rr97.2%
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
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f641.6
Simplified1.6%
clear-numN/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
accelerator-lowering-fma.f64N/A
+-commutativeN/A
+-lowering-+.f641.6
Applied egg-rr1.6%
Taylor expanded in k around 0
+-commutativeN/A
accelerator-lowering-fma.f64N/A
sub-negN/A
*-commutativeN/A
metadata-evalN/A
accelerator-lowering-fma.f64100.0
Simplified100.0%
Final simplification97.4%
(FPCore (a k m)
:precision binary64
(let* ((t_0 (* (pow k m) a)))
(if (<= m -0.016)
t_0
(if (<= m 3.5e-35) (/ a (fma k (+ k 10.0) 1.0)) t_0))))
double code(double a, double k, double m) {
double t_0 = pow(k, m) * a;
double tmp;
if (m <= -0.016) {
tmp = t_0;
} else if (m <= 3.5e-35) {
tmp = a / fma(k, (k + 10.0), 1.0);
} else {
tmp = t_0;
}
return tmp;
}
function code(a, k, m) t_0 = Float64((k ^ m) * a) tmp = 0.0 if (m <= -0.016) tmp = t_0; elseif (m <= 3.5e-35) 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[(N[Power[k, m], $MachinePrecision] * a), $MachinePrecision]}, If[LessEqual[m, -0.016], t$95$0, If[LessEqual[m, 3.5e-35], N[(a / N[(k * N[(k + 10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := {k}^{m} \cdot a\\
\mathbf{if}\;m \leq -0.016:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;m \leq 3.5 \cdot 10^{-35}:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, k + 10, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if m < -0.016 or 3.49999999999999996e-35 < m Initial program 89.3%
associate-/l*N/A
*-commutativeN/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
pow-lowering-pow.f64N/A
associate-+l+N/A
+-commutativeN/A
distribute-rgt-outN/A
accelerator-lowering-fma.f64N/A
+-lowering-+.f6489.3
Applied egg-rr89.3%
Taylor expanded in k around 0
pow-lowering-pow.f64100.0
Simplified100.0%
if -0.016 < m < 3.49999999999999996e-35Initial program 91.6%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6491.6
Simplified91.6%
Final simplification97.4%
(FPCore (a k m)
:precision binary64
(if (<= m -0.085)
(/ (* 99.0 (/ a (* k k))) (* k k))
(if (<= m 0.84)
(/ a (fma k (+ k 10.0) 1.0))
(* (* (* k (* a (* k k))) -20.0) (fma k (+ k 10.0) -1.0)))))
double code(double a, double k, double m) {
double tmp;
if (m <= -0.085) {
tmp = (99.0 * (a / (k * k))) / (k * k);
} else if (m <= 0.84) {
tmp = a / fma(k, (k + 10.0), 1.0);
} else {
tmp = ((k * (a * (k * k))) * -20.0) * fma(k, (k + 10.0), -1.0);
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (m <= -0.085) tmp = Float64(Float64(99.0 * Float64(a / Float64(k * k))) / Float64(k * k)); elseif (m <= 0.84) tmp = Float64(a / fma(k, Float64(k + 10.0), 1.0)); else tmp = Float64(Float64(Float64(k * Float64(a * Float64(k * k))) * -20.0) * fma(k, Float64(k + 10.0), -1.0)); end return tmp end
code[a_, k_, m_] := If[LessEqual[m, -0.085], N[(N[(99.0 * N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(k * k), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 0.84], N[(a / N[(k * N[(k + 10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(N[(N[(k * N[(a * N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * -20.0), $MachinePrecision] * N[(k * N[(k + 10.0), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;m \leq -0.085:\\
\;\;\;\;\frac{99 \cdot \frac{a}{k \cdot k}}{k \cdot k}\\
\mathbf{elif}\;m \leq 0.84:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, k + 10, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\left(\left(k \cdot \left(a \cdot \left(k \cdot k\right)\right)\right) \cdot -20\right) \cdot \mathsf{fma}\left(k, k + 10, -1\right)\\
\end{array}
\end{array}
if m < -0.0850000000000000061Initial program 100.0%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6433.9
Simplified33.9%
flip3-+N/A
associate-/r/N/A
*-lowering-*.f64N/A
Applied egg-rr11.9%
Taylor expanded in k around -inf
Simplified68.3%
Taylor expanded in k around 0
distribute-rgt-outN/A
*-commutativeN/A
distribute-rgt-outN/A
metadata-evalN/A
metadata-evalN/A
*-commutativeN/A
associate-*r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f6477.6
Simplified77.6%
if -0.0850000000000000061 < m < 0.839999999999999969Initial program 92.0%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6491.1
Simplified91.1%
if 0.839999999999999969 < m Initial program 79.3%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f642.9
Simplified2.9%
flip-+N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
metadata-evalN/A
sub-negN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-commutativeN/A
+-lowering-+.f64N/A
sub-negN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
Applied egg-rr2.5%
Taylor expanded in k around 0
+-commutativeN/A
unpow2N/A
associate-*l*N/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
*-commutativeN/A
accelerator-lowering-fma.f64N/A
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
mul-1-negN/A
neg-sub0N/A
--lowering--.f6419.6
Simplified19.6%
Taylor expanded in k around inf
*-commutativeN/A
*-lowering-*.f64N/A
*-commutativeN/A
cube-multN/A
unpow2N/A
associate-*l*N/A
*-commutativeN/A
unpow2N/A
associate-*r*N/A
*-lowering-*.f64N/A
associate-*r*N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6455.7
Simplified55.7%
Final simplification74.1%
(FPCore (a k m)
:precision binary64
(if (<= m -0.025)
(* a (/ 1.0 (* k k)))
(if (<= m 1.12)
(/ a (fma k (+ k 10.0) 1.0))
(* (* (* k (* a (* k k))) -20.0) (fma k (+ k 10.0) -1.0)))))
double code(double a, double k, double m) {
double tmp;
if (m <= -0.025) {
tmp = a * (1.0 / (k * k));
} else if (m <= 1.12) {
tmp = a / fma(k, (k + 10.0), 1.0);
} else {
tmp = ((k * (a * (k * k))) * -20.0) * fma(k, (k + 10.0), -1.0);
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (m <= -0.025) tmp = Float64(a * Float64(1.0 / Float64(k * k))); elseif (m <= 1.12) tmp = Float64(a / fma(k, Float64(k + 10.0), 1.0)); else tmp = Float64(Float64(Float64(k * Float64(a * Float64(k * k))) * -20.0) * fma(k, Float64(k + 10.0), -1.0)); end return tmp end
code[a_, k_, m_] := If[LessEqual[m, -0.025], N[(a * N[(1.0 / N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 1.12], N[(a / N[(k * N[(k + 10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(N[(N[(k * N[(a * N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * -20.0), $MachinePrecision] * N[(k * N[(k + 10.0), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;m \leq -0.025:\\
\;\;\;\;a \cdot \frac{1}{k \cdot k}\\
\mathbf{elif}\;m \leq 1.12:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, k + 10, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\left(\left(k \cdot \left(a \cdot \left(k \cdot k\right)\right)\right) \cdot -20\right) \cdot \mathsf{fma}\left(k, k + 10, -1\right)\\
\end{array}
\end{array}
if m < -0.025000000000000001Initial program 100.0%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6433.9
Simplified33.9%
clear-numN/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
accelerator-lowering-fma.f64N/A
+-commutativeN/A
+-lowering-+.f6433.9
Applied egg-rr33.9%
Taylor expanded in k around inf
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f6457.7
Simplified57.7%
if -0.025000000000000001 < m < 1.1200000000000001Initial program 92.0%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6491.1
Simplified91.1%
if 1.1200000000000001 < m Initial program 79.3%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f642.9
Simplified2.9%
flip-+N/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
metadata-evalN/A
sub-negN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-commutativeN/A
+-lowering-+.f64N/A
sub-negN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
Applied egg-rr2.5%
Taylor expanded in k around 0
+-commutativeN/A
unpow2N/A
associate-*l*N/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
*-commutativeN/A
accelerator-lowering-fma.f64N/A
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
mul-1-negN/A
neg-sub0N/A
--lowering--.f6419.6
Simplified19.6%
Taylor expanded in k around inf
*-commutativeN/A
*-lowering-*.f64N/A
*-commutativeN/A
cube-multN/A
unpow2N/A
associate-*l*N/A
*-commutativeN/A
unpow2N/A
associate-*r*N/A
*-lowering-*.f64N/A
associate-*r*N/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6455.7
Simplified55.7%
Final simplification67.8%
(FPCore (a k m)
:precision binary64
(if (<= m -0.048)
(* a (/ 1.0 (* k k)))
(if (<= m 0.74)
(/ a (fma k (+ k 10.0) 1.0))
(* a (* -980.0 (* k (* k k)))))))
double code(double a, double k, double m) {
double tmp;
if (m <= -0.048) {
tmp = a * (1.0 / (k * k));
} else if (m <= 0.74) {
tmp = a / fma(k, (k + 10.0), 1.0);
} else {
tmp = a * (-980.0 * (k * (k * k)));
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (m <= -0.048) tmp = Float64(a * Float64(1.0 / Float64(k * k))); elseif (m <= 0.74) tmp = Float64(a / fma(k, Float64(k + 10.0), 1.0)); else tmp = Float64(a * Float64(-980.0 * Float64(k * Float64(k * k)))); end return tmp end
code[a_, k_, m_] := If[LessEqual[m, -0.048], N[(a * N[(1.0 / N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 0.74], N[(a / N[(k * N[(k + 10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(a * N[(-980.0 * N[(k * N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;m \leq -0.048:\\
\;\;\;\;a \cdot \frac{1}{k \cdot k}\\
\mathbf{elif}\;m \leq 0.74:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, k + 10, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;a \cdot \left(-980 \cdot \left(k \cdot \left(k \cdot k\right)\right)\right)\\
\end{array}
\end{array}
if m < -0.048000000000000001Initial program 100.0%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6433.9
Simplified33.9%
clear-numN/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
accelerator-lowering-fma.f64N/A
+-commutativeN/A
+-lowering-+.f6433.9
Applied egg-rr33.9%
Taylor expanded in k around inf
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f6457.7
Simplified57.7%
if -0.048000000000000001 < m < 0.73999999999999999Initial program 92.0%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6491.1
Simplified91.1%
if 0.73999999999999999 < m Initial program 79.3%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f642.9
Simplified2.9%
clear-numN/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
accelerator-lowering-fma.f64N/A
+-commutativeN/A
+-lowering-+.f642.9
Applied egg-rr2.9%
Taylor expanded in k around 0
+-commutativeN/A
accelerator-lowering-fma.f64N/A
sub-negN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
accelerator-lowering-fma.f6416.5
Simplified16.5%
Taylor expanded in k around inf
*-lowering-*.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6453.2
Simplified53.2%
Final simplification66.9%
(FPCore (a k m)
:precision binary64
(if (<= m -0.025)
(/ a (* k k))
(if (<= m 1.05)
(/ a (fma k (+ k 10.0) 1.0))
(* a (* -980.0 (* k (* k k)))))))
double code(double a, double k, double m) {
double tmp;
if (m <= -0.025) {
tmp = a / (k * k);
} else if (m <= 1.05) {
tmp = a / fma(k, (k + 10.0), 1.0);
} else {
tmp = a * (-980.0 * (k * (k * k)));
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (m <= -0.025) tmp = Float64(a / Float64(k * k)); elseif (m <= 1.05) tmp = Float64(a / fma(k, Float64(k + 10.0), 1.0)); else tmp = Float64(a * Float64(-980.0 * Float64(k * Float64(k * k)))); end return tmp end
code[a_, k_, m_] := If[LessEqual[m, -0.025], N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 1.05], N[(a / N[(k * N[(k + 10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(a * N[(-980.0 * N[(k * N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;m \leq -0.025:\\
\;\;\;\;\frac{a}{k \cdot k}\\
\mathbf{elif}\;m \leq 1.05:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, k + 10, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;a \cdot \left(-980 \cdot \left(k \cdot \left(k \cdot k\right)\right)\right)\\
\end{array}
\end{array}
if m < -0.025000000000000001Initial program 100.0%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6433.9
Simplified33.9%
Taylor expanded in k around inf
unpow2N/A
*-lowering-*.f6456.5
Simplified56.5%
if -0.025000000000000001 < m < 1.05000000000000004Initial program 92.0%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6491.1
Simplified91.1%
if 1.05000000000000004 < m Initial program 79.3%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f642.9
Simplified2.9%
clear-numN/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
accelerator-lowering-fma.f64N/A
+-commutativeN/A
+-lowering-+.f642.9
Applied egg-rr2.9%
Taylor expanded in k around 0
+-commutativeN/A
accelerator-lowering-fma.f64N/A
sub-negN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
accelerator-lowering-fma.f6416.5
Simplified16.5%
Taylor expanded in k around inf
*-lowering-*.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6453.2
Simplified53.2%
Final simplification66.5%
(FPCore (a k m) :precision binary64 (if (<= m -0.061) (/ a (* k k)) (if (<= m 0.74) (/ a (fma k k 1.0)) (* a (* -980.0 (* k (* k k)))))))
double code(double a, double k, double m) {
double tmp;
if (m <= -0.061) {
tmp = a / (k * k);
} else if (m <= 0.74) {
tmp = a / fma(k, k, 1.0);
} else {
tmp = a * (-980.0 * (k * (k * k)));
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (m <= -0.061) tmp = Float64(a / Float64(k * k)); elseif (m <= 0.74) tmp = Float64(a / fma(k, k, 1.0)); else tmp = Float64(a * Float64(-980.0 * Float64(k * Float64(k * k)))); end return tmp end
code[a_, k_, m_] := If[LessEqual[m, -0.061], N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 0.74], N[(a / N[(k * k + 1.0), $MachinePrecision]), $MachinePrecision], N[(a * N[(-980.0 * N[(k * N[(k * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;m \leq -0.061:\\
\;\;\;\;\frac{a}{k \cdot k}\\
\mathbf{elif}\;m \leq 0.74:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, k, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;a \cdot \left(-980 \cdot \left(k \cdot \left(k \cdot k\right)\right)\right)\\
\end{array}
\end{array}
if m < -0.060999999999999999Initial program 100.0%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6433.9
Simplified33.9%
Taylor expanded in k around inf
unpow2N/A
*-lowering-*.f6456.5
Simplified56.5%
if -0.060999999999999999 < m < 0.73999999999999999Initial program 92.0%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6491.1
Simplified91.1%
Taylor expanded in k around inf
Simplified90.2%
if 0.73999999999999999 < m Initial program 79.3%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f642.9
Simplified2.9%
clear-numN/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
accelerator-lowering-fma.f64N/A
+-commutativeN/A
+-lowering-+.f642.9
Applied egg-rr2.9%
Taylor expanded in k around 0
+-commutativeN/A
accelerator-lowering-fma.f64N/A
sub-negN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
accelerator-lowering-fma.f6416.5
Simplified16.5%
Taylor expanded in k around inf
*-lowering-*.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6453.2
Simplified53.2%
Final simplification66.2%
(FPCore (a k m) :precision binary64 (if (<= m -0.58) (/ a (* k k)) (if (<= m 0.92) (/ a (fma k k 1.0)) (* k (* k (* a (* k -980.0)))))))
double code(double a, double k, double m) {
double tmp;
if (m <= -0.58) {
tmp = a / (k * k);
} else if (m <= 0.92) {
tmp = a / fma(k, k, 1.0);
} else {
tmp = k * (k * (a * (k * -980.0)));
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (m <= -0.58) tmp = Float64(a / Float64(k * k)); elseif (m <= 0.92) tmp = Float64(a / fma(k, k, 1.0)); else tmp = Float64(k * Float64(k * Float64(a * Float64(k * -980.0)))); end return tmp end
code[a_, k_, m_] := If[LessEqual[m, -0.58], N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 0.92], N[(a / N[(k * k + 1.0), $MachinePrecision]), $MachinePrecision], N[(k * N[(k * N[(a * N[(k * -980.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;m \leq -0.58:\\
\;\;\;\;\frac{a}{k \cdot k}\\
\mathbf{elif}\;m \leq 0.92:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, k, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;k \cdot \left(k \cdot \left(a \cdot \left(k \cdot -980\right)\right)\right)\\
\end{array}
\end{array}
if m < -0.57999999999999996Initial program 100.0%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6433.9
Simplified33.9%
Taylor expanded in k around inf
unpow2N/A
*-lowering-*.f6456.5
Simplified56.5%
if -0.57999999999999996 < m < 0.92000000000000004Initial program 92.0%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6491.1
Simplified91.1%
Taylor expanded in k around inf
Simplified90.2%
if 0.92000000000000004 < m Initial program 79.3%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f642.9
Simplified2.9%
clear-numN/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
accelerator-lowering-fma.f64N/A
+-commutativeN/A
+-lowering-+.f642.9
Applied egg-rr2.9%
Taylor expanded in k around 0
+-commutativeN/A
accelerator-lowering-fma.f64N/A
sub-negN/A
metadata-evalN/A
accelerator-lowering-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
accelerator-lowering-fma.f6416.5
Simplified16.5%
Taylor expanded in k around inf
associate-*r*N/A
*-commutativeN/A
cube-multN/A
unpow2N/A
associate-*l*N/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
associate-*l*N/A
*-commutativeN/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f6446.7
Simplified46.7%
(FPCore (a k m)
:precision binary64
(if (<= m -0.6)
(/ a (* k k))
(if (<= m 3.5e-10)
(/ a (fma k k 1.0))
(* a (fma k (fma k 99.0 -10.0) 1.0)))))
double code(double a, double k, double m) {
double tmp;
if (m <= -0.6) {
tmp = a / (k * k);
} else if (m <= 3.5e-10) {
tmp = a / fma(k, k, 1.0);
} else {
tmp = a * fma(k, fma(k, 99.0, -10.0), 1.0);
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (m <= -0.6) tmp = Float64(a / Float64(k * k)); elseif (m <= 3.5e-10) tmp = Float64(a / fma(k, k, 1.0)); else tmp = Float64(a * fma(k, fma(k, 99.0, -10.0), 1.0)); end return tmp end
code[a_, k_, m_] := If[LessEqual[m, -0.6], N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 3.5e-10], N[(a / N[(k * k + 1.0), $MachinePrecision]), $MachinePrecision], N[(a * N[(k * N[(k * 99.0 + -10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;m \leq -0.6:\\
\;\;\;\;\frac{a}{k \cdot k}\\
\mathbf{elif}\;m \leq 3.5 \cdot 10^{-10}:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, k, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;a \cdot \mathsf{fma}\left(k, \mathsf{fma}\left(k, 99, -10\right), 1\right)\\
\end{array}
\end{array}
if m < -0.599999999999999978Initial program 100.0%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6433.9
Simplified33.9%
Taylor expanded in k around inf
unpow2N/A
*-lowering-*.f6456.5
Simplified56.5%
if -0.599999999999999978 < m < 3.4999999999999998e-10Initial program 91.9%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6491.6
Simplified91.6%
Taylor expanded in k around inf
Simplified90.6%
if 3.4999999999999998e-10 < m Initial program 79.6%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f643.5
Simplified3.5%
clear-numN/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
accelerator-lowering-fma.f64N/A
+-commutativeN/A
+-lowering-+.f643.5
Applied egg-rr3.5%
Taylor expanded in k around 0
+-commutativeN/A
accelerator-lowering-fma.f64N/A
sub-negN/A
*-commutativeN/A
metadata-evalN/A
accelerator-lowering-fma.f6430.3
Simplified30.3%
Final simplification57.9%
(FPCore (a k m)
:precision binary64
(if (<= m -1.95e-160)
(/ a (* k k))
(if (<= m 3.5e-35)
(/ a (fma k 10.0 1.0))
(* a (fma k (fma k 99.0 -10.0) 1.0)))))
double code(double a, double k, double m) {
double tmp;
if (m <= -1.95e-160) {
tmp = a / (k * k);
} else if (m <= 3.5e-35) {
tmp = a / fma(k, 10.0, 1.0);
} else {
tmp = a * fma(k, fma(k, 99.0, -10.0), 1.0);
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (m <= -1.95e-160) tmp = Float64(a / Float64(k * k)); elseif (m <= 3.5e-35) tmp = Float64(a / fma(k, 10.0, 1.0)); else tmp = Float64(a * fma(k, fma(k, 99.0, -10.0), 1.0)); end return tmp end
code[a_, k_, m_] := If[LessEqual[m, -1.95e-160], N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 3.5e-35], N[(a / N[(k * 10.0 + 1.0), $MachinePrecision]), $MachinePrecision], N[(a * N[(k * N[(k * 99.0 + -10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;m \leq -1.95 \cdot 10^{-160}:\\
\;\;\;\;\frac{a}{k \cdot k}\\
\mathbf{elif}\;m \leq 3.5 \cdot 10^{-35}:\\
\;\;\;\;\frac{a}{\mathsf{fma}\left(k, 10, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;a \cdot \mathsf{fma}\left(k, \mathsf{fma}\left(k, 99, -10\right), 1\right)\\
\end{array}
\end{array}
if m < -1.94999999999999995e-160Initial program 98.2%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6446.2
Simplified46.2%
Taylor expanded in k around inf
unpow2N/A
*-lowering-*.f6456.5
Simplified56.5%
if -1.94999999999999995e-160 < m < 3.49999999999999996e-35Initial program 91.6%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6491.6
Simplified91.6%
Taylor expanded in k around 0
+-commutativeN/A
*-commutativeN/A
accelerator-lowering-fma.f6466.9
Simplified66.9%
if 3.49999999999999996e-35 < m Initial program 80.2%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f646.2
Simplified6.2%
clear-numN/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
accelerator-lowering-fma.f64N/A
+-commutativeN/A
+-lowering-+.f646.2
Applied egg-rr6.2%
Taylor expanded in k around 0
+-commutativeN/A
accelerator-lowering-fma.f64N/A
sub-negN/A
*-commutativeN/A
metadata-evalN/A
accelerator-lowering-fma.f6432.2
Simplified32.2%
Final simplification49.7%
(FPCore (a k m) :precision binary64 (let* ((t_0 (/ a (* k k)))) (if (<= k 1.85e-240) t_0 (if (<= k 0.098) (* a (fma k -10.0 1.0)) t_0))))
double code(double a, double k, double m) {
double t_0 = a / (k * k);
double tmp;
if (k <= 1.85e-240) {
tmp = t_0;
} else if (k <= 0.098) {
tmp = a * fma(k, -10.0, 1.0);
} else {
tmp = t_0;
}
return tmp;
}
function code(a, k, m) t_0 = Float64(a / Float64(k * k)) tmp = 0.0 if (k <= 1.85e-240) tmp = t_0; elseif (k <= 0.098) tmp = Float64(a * fma(k, -10.0, 1.0)); else tmp = t_0; end return tmp end
code[a_, k_, m_] := Block[{t$95$0 = N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[k, 1.85e-240], t$95$0, If[LessEqual[k, 0.098], N[(a * N[(k * -10.0 + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{a}{k \cdot k}\\
\mathbf{if}\;k \leq 1.85 \cdot 10^{-240}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;k \leq 0.098:\\
\;\;\;\;a \cdot \mathsf{fma}\left(k, -10, 1\right)\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if k < 1.8500000000000001e-240 or 0.098000000000000004 < k Initial program 86.1%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6437.3
Simplified37.3%
Taylor expanded in k around inf
unpow2N/A
*-lowering-*.f6440.7
Simplified40.7%
if 1.8500000000000001e-240 < k < 0.098000000000000004Initial program 100.0%
Taylor expanded in k around 0
*-commutativeN/A
associate-*r*N/A
associate-*l*N/A
*-commutativeN/A
associate-*r*N/A
distribute-lft1-inN/A
rem-exp-logN/A
remove-double-negN/A
log-recN/A
exp-prodN/A
distribute-lft-neg-inN/A
*-commutativeN/A
mul-1-negN/A
*-lowering-*.f64N/A
accelerator-lowering-fma.f64N/A
Simplified99.0%
Taylor expanded in m around 0
Simplified50.8%
Final simplification43.5%
(FPCore (a k m) :precision binary64 (if (<= m -1.55e-193) (/ a (* k k)) (* a (fma k (fma k 99.0 -10.0) 1.0))))
double code(double a, double k, double m) {
double tmp;
if (m <= -1.55e-193) {
tmp = a / (k * k);
} else {
tmp = a * fma(k, fma(k, 99.0, -10.0), 1.0);
}
return tmp;
}
function code(a, k, m) tmp = 0.0 if (m <= -1.55e-193) tmp = Float64(a / Float64(k * k)); else tmp = Float64(a * fma(k, fma(k, 99.0, -10.0), 1.0)); end return tmp end
code[a_, k_, m_] := If[LessEqual[m, -1.55e-193], N[(a / N[(k * k), $MachinePrecision]), $MachinePrecision], N[(a * N[(k * N[(k * 99.0 + -10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;m \leq -1.55 \cdot 10^{-193}:\\
\;\;\;\;\frac{a}{k \cdot k}\\
\mathbf{else}:\\
\;\;\;\;a \cdot \mathsf{fma}\left(k, \mathsf{fma}\left(k, 99, -10\right), 1\right)\\
\end{array}
\end{array}
if m < -1.5500000000000001e-193Initial program 97.3%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6447.3
Simplified47.3%
Taylor expanded in k around inf
unpow2N/A
*-lowering-*.f6456.3
Simplified56.3%
if -1.5500000000000001e-193 < m Initial program 84.7%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6437.0
Simplified37.0%
clear-numN/A
associate-/r/N/A
*-lowering-*.f64N/A
/-lowering-/.f64N/A
accelerator-lowering-fma.f64N/A
+-commutativeN/A
+-lowering-+.f6437.0
Applied egg-rr37.0%
Taylor expanded in k around 0
+-commutativeN/A
accelerator-lowering-fma.f64N/A
sub-negN/A
*-commutativeN/A
metadata-evalN/A
accelerator-lowering-fma.f6440.8
Simplified40.8%
Final simplification47.3%
(FPCore (a k m) :precision binary64 (if (<= m 0.21) a (* a (* k -10.0))))
double code(double a, double k, double m) {
double tmp;
if (m <= 0.21) {
tmp = a;
} else {
tmp = a * (k * -10.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.21d0) then
tmp = a
else
tmp = a * (k * (-10.0d0))
end if
code = tmp
end function
public static double code(double a, double k, double m) {
double tmp;
if (m <= 0.21) {
tmp = a;
} else {
tmp = a * (k * -10.0);
}
return tmp;
}
def code(a, k, m): tmp = 0 if m <= 0.21: tmp = a else: tmp = a * (k * -10.0) return tmp
function code(a, k, m) tmp = 0.0 if (m <= 0.21) tmp = a; else tmp = Float64(a * Float64(k * -10.0)); end return tmp end
function tmp_2 = code(a, k, m) tmp = 0.0; if (m <= 0.21) tmp = a; else tmp = a * (k * -10.0); end tmp_2 = tmp; end
code[a_, k_, m_] := If[LessEqual[m, 0.21], a, N[(a * N[(k * -10.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;m \leq 0.21:\\
\;\;\;\;a\\
\mathbf{else}:\\
\;\;\;\;a \cdot \left(k \cdot -10\right)\\
\end{array}
\end{array}
if m < 0.209999999999999992Initial program 95.9%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6462.8
Simplified62.8%
Taylor expanded in k around 0
Simplified28.3%
if 0.209999999999999992 < m Initial program 79.3%
Taylor expanded in k around 0
*-commutativeN/A
associate-*r*N/A
associate-*l*N/A
*-commutativeN/A
associate-*r*N/A
distribute-lft1-inN/A
rem-exp-logN/A
remove-double-negN/A
log-recN/A
exp-prodN/A
distribute-lft-neg-inN/A
*-commutativeN/A
mul-1-negN/A
*-lowering-*.f64N/A
accelerator-lowering-fma.f64N/A
Simplified73.9%
Taylor expanded in m around 0
Simplified5.1%
Taylor expanded in k around inf
*-commutativeN/A
*-lowering-*.f6417.8
Simplified17.8%
Final simplification24.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 90.0%
Taylor expanded in m around 0
/-lowering-/.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
accelerator-lowering-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
+-lowering-+.f6441.3
Simplified41.3%
Taylor expanded in k around 0
Simplified19.5%
herbie shell --seed 2024194
(FPCore (a k m)
:name "Falkner and Boettcher, Appendix A"
:precision binary64
(/ (* a (pow k m)) (+ (+ 1.0 (* 10.0 k)) (* k k))))