
(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}
a\_m = (fabs.f64 a)
a\_s = (copysign.f64 #s(literal 1 binary64) a)
(FPCore (a_s a_m k m)
:precision binary64
(let* ((t_0 (* (pow k m) a_m))
(t_1 (/ t_0 (+ (* k k) (+ (* 10.0 k) 1.0))))
(t_2 (pow (/ -1.0 (/ -1.0 k)) m)))
(*
a_s
(if (<= t_1 0.0)
(/ (/ (* (fma (/ t_2 k) -10.0 t_2) a_m) k) k)
(if (<= t_1 1e+278) (/ t_0 (fma k 10.0 (fma k k 1.0))) t_0)))))a\_m = fabs(a);
a\_s = copysign(1.0, a);
double code(double a_s, double a_m, double k, double m) {
double t_0 = pow(k, m) * a_m;
double t_1 = t_0 / ((k * k) + ((10.0 * k) + 1.0));
double t_2 = pow((-1.0 / (-1.0 / k)), m);
double tmp;
if (t_1 <= 0.0) {
tmp = ((fma((t_2 / k), -10.0, t_2) * a_m) / k) / k;
} else if (t_1 <= 1e+278) {
tmp = t_0 / fma(k, 10.0, fma(k, k, 1.0));
} else {
tmp = t_0;
}
return a_s * tmp;
}
a\_m = abs(a) a\_s = copysign(1.0, a) function code(a_s, a_m, k, m) t_0 = Float64((k ^ m) * a_m) t_1 = Float64(t_0 / Float64(Float64(k * k) + Float64(Float64(10.0 * k) + 1.0))) t_2 = Float64(-1.0 / Float64(-1.0 / k)) ^ m tmp = 0.0 if (t_1 <= 0.0) tmp = Float64(Float64(Float64(fma(Float64(t_2 / k), -10.0, t_2) * a_m) / k) / k); elseif (t_1 <= 1e+278) tmp = Float64(t_0 / fma(k, 10.0, fma(k, k, 1.0))); else tmp = t_0; end return Float64(a_s * tmp) end
a\_m = N[Abs[a], $MachinePrecision]
a\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[a]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[a$95$s_, a$95$m_, k_, m_] := Block[{t$95$0 = N[(N[Power[k, m], $MachinePrecision] * a$95$m), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 / N[(N[(k * k), $MachinePrecision] + N[(N[(10.0 * k), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[Power[N[(-1.0 / N[(-1.0 / k), $MachinePrecision]), $MachinePrecision], m], $MachinePrecision]}, N[(a$95$s * If[LessEqual[t$95$1, 0.0], N[(N[(N[(N[(N[(t$95$2 / k), $MachinePrecision] * -10.0 + t$95$2), $MachinePrecision] * a$95$m), $MachinePrecision] / k), $MachinePrecision] / k), $MachinePrecision], If[LessEqual[t$95$1, 1e+278], N[(t$95$0 / N[(k * 10.0 + N[(k * k + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]), $MachinePrecision]]]]
\begin{array}{l}
a\_m = \left|a\right|
\\
a\_s = \mathsf{copysign}\left(1, a\right)
\\
\begin{array}{l}
t_0 := {k}^{m} \cdot a\_m\\
t_1 := \frac{t\_0}{k \cdot k + \left(10 \cdot k + 1\right)}\\
t_2 := {\left(\frac{-1}{\frac{-1}{k}}\right)}^{m}\\
a\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_1 \leq 0:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(\frac{t\_2}{k}, -10, t\_2\right) \cdot a\_m}{k}}{k}\\
\mathbf{elif}\;t\_1 \leq 10^{+278}:\\
\;\;\;\;\frac{t\_0}{\mathsf{fma}\left(k, 10, \mathsf{fma}\left(k, k, 1\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\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.4%
Taylor expanded in k around -inf
Applied rewrites72.1%
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))) < 9.99999999999999964e277Initial program 99.9%
lift-+.f64N/A
lift-+.f64N/A
+-commutativeN/A
associate-+l+N/A
lift-*.f64N/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lift-*.f64N/A
lower-fma.f6499.9
Applied rewrites99.9%
if 9.99999999999999964e277 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) Initial program 51.0%
Taylor expanded in k around 0
*-commutativeN/A
lower-*.f64N/A
lower-pow.f64100.0
Applied rewrites100.0%
Final simplification80.2%
a\_m = (fabs.f64 a)
a\_s = (copysign.f64 #s(literal 1 binary64) a)
(FPCore (a_s a_m k m)
:precision binary64
(let* ((t_0 (/ (* (pow k m) a_m) (+ (* k k) (+ (* 10.0 k) 1.0)))))
(*
a_s
(if (<= t_0 1e-315)
(/ a_m (* (+ 10.0 k) k))
(if (<= t_0 5e+295)
(/ a_m (fma 10.0 k 1.0))
(if (<= t_0 INFINITY)
(/ a_m (* k k))
(fma (* (fma 99.0 k -10.0) a_m) k a_m)))))))a\_m = fabs(a);
a\_s = copysign(1.0, a);
double code(double a_s, double a_m, double k, double m) {
double t_0 = (pow(k, m) * a_m) / ((k * k) + ((10.0 * k) + 1.0));
double tmp;
if (t_0 <= 1e-315) {
tmp = a_m / ((10.0 + k) * k);
} else if (t_0 <= 5e+295) {
tmp = a_m / fma(10.0, k, 1.0);
} else if (t_0 <= ((double) INFINITY)) {
tmp = a_m / (k * k);
} else {
tmp = fma((fma(99.0, k, -10.0) * a_m), k, a_m);
}
return a_s * tmp;
}
a\_m = abs(a) a\_s = copysign(1.0, a) function code(a_s, a_m, k, m) t_0 = Float64(Float64((k ^ m) * a_m) / Float64(Float64(k * k) + Float64(Float64(10.0 * k) + 1.0))) tmp = 0.0 if (t_0 <= 1e-315) tmp = Float64(a_m / Float64(Float64(10.0 + k) * k)); elseif (t_0 <= 5e+295) tmp = Float64(a_m / fma(10.0, k, 1.0)); elseif (t_0 <= Inf) tmp = Float64(a_m / Float64(k * k)); else tmp = fma(Float64(fma(99.0, k, -10.0) * a_m), k, a_m); end return Float64(a_s * tmp) end
a\_m = N[Abs[a], $MachinePrecision]
a\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[a]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[a$95$s_, a$95$m_, k_, m_] := Block[{t$95$0 = N[(N[(N[Power[k, m], $MachinePrecision] * a$95$m), $MachinePrecision] / N[(N[(k * k), $MachinePrecision] + N[(N[(10.0 * k), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(a$95$s * If[LessEqual[t$95$0, 1e-315], N[(a$95$m / N[(N[(10.0 + k), $MachinePrecision] * k), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$0, 5e+295], N[(a$95$m / N[(10.0 * k + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$0, Infinity], N[(a$95$m / N[(k * k), $MachinePrecision]), $MachinePrecision], N[(N[(N[(99.0 * k + -10.0), $MachinePrecision] * a$95$m), $MachinePrecision] * k + a$95$m), $MachinePrecision]]]]), $MachinePrecision]]
\begin{array}{l}
a\_m = \left|a\right|
\\
a\_s = \mathsf{copysign}\left(1, a\right)
\\
\begin{array}{l}
t_0 := \frac{{k}^{m} \cdot a\_m}{k \cdot k + \left(10 \cdot k + 1\right)}\\
a\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_0 \leq 10^{-315}:\\
\;\;\;\;\frac{a\_m}{\left(10 + k\right) \cdot k}\\
\mathbf{elif}\;t\_0 \leq 5 \cdot 10^{+295}:\\
\;\;\;\;\frac{a\_m}{\mathsf{fma}\left(10, k, 1\right)}\\
\mathbf{elif}\;t\_0 \leq \infty:\\
\;\;\;\;\frac{a\_m}{k \cdot k}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(99, k, -10\right) \cdot a\_m, k, a\_m\right)\\
\end{array}
\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))) < 9.999999985e-316Initial program 97.4%
Taylor expanded in m around 0
lower-/.f64N/A
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites46.2%
Taylor expanded in k around inf
Applied rewrites31.8%
if 9.999999985e-316 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) < 4.99999999999999991e295Initial program 99.9%
Taylor expanded in m around 0
lower-/.f64N/A
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites97.8%
Taylor expanded in k around 0
Applied rewrites68.0%
if 4.99999999999999991e295 < (/.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
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites2.9%
Taylor expanded in k around inf
Applied rewrites43.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
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites1.6%
Taylor expanded in k around 0
Applied rewrites22.0%
Taylor expanded in k around 0
Applied rewrites77.1%
Final simplification40.6%
a\_m = (fabs.f64 a)
a\_s = (copysign.f64 #s(literal 1 binary64) a)
(FPCore (a_s a_m k m)
:precision binary64
(let* ((t_0 (/ a_m (* k k)))
(t_1 (/ (* (pow k m) a_m) (+ (* k k) (+ (* 10.0 k) 1.0)))))
(*
a_s
(if (<= t_1 1e-315)
t_0
(if (<= t_1 5e+295)
(/ a_m (fma 10.0 k 1.0))
(if (<= t_1 INFINITY) t_0 (fma (* (fma 99.0 k -10.0) a_m) k a_m)))))))a\_m = fabs(a);
a\_s = copysign(1.0, a);
double code(double a_s, double a_m, double k, double m) {
double t_0 = a_m / (k * k);
double t_1 = (pow(k, m) * a_m) / ((k * k) + ((10.0 * k) + 1.0));
double tmp;
if (t_1 <= 1e-315) {
tmp = t_0;
} else if (t_1 <= 5e+295) {
tmp = a_m / fma(10.0, k, 1.0);
} else if (t_1 <= ((double) INFINITY)) {
tmp = t_0;
} else {
tmp = fma((fma(99.0, k, -10.0) * a_m), k, a_m);
}
return a_s * tmp;
}
a\_m = abs(a) a\_s = copysign(1.0, a) function code(a_s, a_m, k, m) t_0 = Float64(a_m / Float64(k * k)) t_1 = Float64(Float64((k ^ m) * a_m) / Float64(Float64(k * k) + Float64(Float64(10.0 * k) + 1.0))) tmp = 0.0 if (t_1 <= 1e-315) tmp = t_0; elseif (t_1 <= 5e+295) tmp = Float64(a_m / fma(10.0, k, 1.0)); elseif (t_1 <= Inf) tmp = t_0; else tmp = fma(Float64(fma(99.0, k, -10.0) * a_m), k, a_m); end return Float64(a_s * tmp) end
a\_m = N[Abs[a], $MachinePrecision]
a\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[a]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[a$95$s_, a$95$m_, k_, m_] := Block[{t$95$0 = N[(a$95$m / N[(k * k), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(N[Power[k, m], $MachinePrecision] * a$95$m), $MachinePrecision] / N[(N[(k * k), $MachinePrecision] + N[(N[(10.0 * k), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(a$95$s * If[LessEqual[t$95$1, 1e-315], t$95$0, If[LessEqual[t$95$1, 5e+295], N[(a$95$m / N[(10.0 * k + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, Infinity], t$95$0, N[(N[(N[(99.0 * k + -10.0), $MachinePrecision] * a$95$m), $MachinePrecision] * k + a$95$m), $MachinePrecision]]]]), $MachinePrecision]]]
\begin{array}{l}
a\_m = \left|a\right|
\\
a\_s = \mathsf{copysign}\left(1, a\right)
\\
\begin{array}{l}
t_0 := \frac{a\_m}{k \cdot k}\\
t_1 := \frac{{k}^{m} \cdot a\_m}{k \cdot k + \left(10 \cdot k + 1\right)}\\
a\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_1 \leq 10^{-315}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{+295}:\\
\;\;\;\;\frac{a\_m}{\mathsf{fma}\left(10, k, 1\right)}\\
\mathbf{elif}\;t\_1 \leq \infty:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(99, k, -10\right) \cdot a\_m, k, a\_m\right)\\
\end{array}
\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))) < 9.999999985e-316 or 4.99999999999999991e295 < (/.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.7%
Taylor expanded in m around 0
lower-/.f64N/A
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites41.2%
Taylor expanded in k around inf
Applied rewrites36.1%
if 9.999999985e-316 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) < 4.99999999999999991e295Initial program 99.9%
Taylor expanded in m around 0
lower-/.f64N/A
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites97.8%
Taylor expanded in k around 0
Applied rewrites68.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
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites1.6%
Taylor expanded in k around 0
Applied rewrites22.0%
Taylor expanded in k around 0
Applied rewrites77.1%
Final simplification43.1%
a\_m = (fabs.f64 a)
a\_s = (copysign.f64 #s(literal 1 binary64) a)
(FPCore (a_s a_m k m)
:precision binary64
(let* ((t_0 (/ a_m (* k k)))
(t_1 (/ (* (pow k m) a_m) (+ (* k k) (+ (* 10.0 k) 1.0)))))
(*
a_s
(if (<= t_1 1e-315)
t_0
(if (<= t_1 5e+295)
(* 1.0 a_m)
(if (<= t_1 INFINITY) t_0 (fma (* (fma 99.0 k -10.0) a_m) k a_m)))))))a\_m = fabs(a);
a\_s = copysign(1.0, a);
double code(double a_s, double a_m, double k, double m) {
double t_0 = a_m / (k * k);
double t_1 = (pow(k, m) * a_m) / ((k * k) + ((10.0 * k) + 1.0));
double tmp;
if (t_1 <= 1e-315) {
tmp = t_0;
} else if (t_1 <= 5e+295) {
tmp = 1.0 * a_m;
} else if (t_1 <= ((double) INFINITY)) {
tmp = t_0;
} else {
tmp = fma((fma(99.0, k, -10.0) * a_m), k, a_m);
}
return a_s * tmp;
}
a\_m = abs(a) a\_s = copysign(1.0, a) function code(a_s, a_m, k, m) t_0 = Float64(a_m / Float64(k * k)) t_1 = Float64(Float64((k ^ m) * a_m) / Float64(Float64(k * k) + Float64(Float64(10.0 * k) + 1.0))) tmp = 0.0 if (t_1 <= 1e-315) tmp = t_0; elseif (t_1 <= 5e+295) tmp = Float64(1.0 * a_m); elseif (t_1 <= Inf) tmp = t_0; else tmp = fma(Float64(fma(99.0, k, -10.0) * a_m), k, a_m); end return Float64(a_s * tmp) end
a\_m = N[Abs[a], $MachinePrecision]
a\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[a]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[a$95$s_, a$95$m_, k_, m_] := Block[{t$95$0 = N[(a$95$m / N[(k * k), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(N[Power[k, m], $MachinePrecision] * a$95$m), $MachinePrecision] / N[(N[(k * k), $MachinePrecision] + N[(N[(10.0 * k), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(a$95$s * If[LessEqual[t$95$1, 1e-315], t$95$0, If[LessEqual[t$95$1, 5e+295], N[(1.0 * a$95$m), $MachinePrecision], If[LessEqual[t$95$1, Infinity], t$95$0, N[(N[(N[(99.0 * k + -10.0), $MachinePrecision] * a$95$m), $MachinePrecision] * k + a$95$m), $MachinePrecision]]]]), $MachinePrecision]]]
\begin{array}{l}
a\_m = \left|a\right|
\\
a\_s = \mathsf{copysign}\left(1, a\right)
\\
\begin{array}{l}
t_0 := \frac{a\_m}{k \cdot k}\\
t_1 := \frac{{k}^{m} \cdot a\_m}{k \cdot k + \left(10 \cdot k + 1\right)}\\
a\_s \cdot \begin{array}{l}
\mathbf{if}\;t\_1 \leq 10^{-315}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{+295}:\\
\;\;\;\;1 \cdot a\_m\\
\mathbf{elif}\;t\_1 \leq \infty:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(99, k, -10\right) \cdot a\_m, k, a\_m\right)\\
\end{array}
\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))) < 9.999999985e-316 or 4.99999999999999991e295 < (/.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.7%
Taylor expanded in m around 0
lower-/.f64N/A
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites41.2%
Taylor expanded in k around inf
Applied rewrites36.1%
if 9.999999985e-316 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) < 4.99999999999999991e295Initial program 99.9%
lift-+.f64N/A
lift-+.f64N/A
+-commutativeN/A
associate-+l+N/A
lift-*.f64N/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lift-*.f64N/A
lower-fma.f6499.9
Applied rewrites99.9%
lift-/.f64N/A
lift-*.f64N/A
*-commutativeN/A
lift-fma.f64N/A
*-commutativeN/A
lift-fma.f64N/A
lift-*.f64N/A
+-commutativeN/A
associate-+r+N/A
+-commutativeN/A
lift-*.f64N/A
associate-/l*N/A
lift-*.f64N/A
+-commutativeN/A
+-commutativeN/A
associate-+r+N/A
lift-*.f64N/A
distribute-rgt-inN/A
+-commutativeN/A
lift-+.f64N/A
*-commutativeN/A
lift-fma.f64N/A
Applied rewrites99.6%
Taylor expanded in k around 0
*-commutativeN/A
lower-*.f64N/A
lower-pow.f6469.0
Applied rewrites69.0%
Taylor expanded in m around 0
Applied rewrites66.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
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites1.6%
Taylor expanded in k around 0
Applied rewrites22.0%
Taylor expanded in k around 0
Applied rewrites77.1%
Final simplification43.0%
a\_m = (fabs.f64 a)
a\_s = (copysign.f64 #s(literal 1 binary64) a)
(FPCore (a_s a_m k m)
:precision binary64
(let* ((t_0 (* (pow k m) a_m)))
(*
a_s
(if (<= (/ t_0 (+ (* k k) (+ (* 10.0 k) 1.0))) 1e+278)
(* (/ (pow k m) (fma (+ 10.0 k) k 1.0)) a_m)
t_0))))a\_m = fabs(a);
a\_s = copysign(1.0, a);
double code(double a_s, double a_m, double k, double m) {
double t_0 = pow(k, m) * a_m;
double tmp;
if ((t_0 / ((k * k) + ((10.0 * k) + 1.0))) <= 1e+278) {
tmp = (pow(k, m) / fma((10.0 + k), k, 1.0)) * a_m;
} else {
tmp = t_0;
}
return a_s * tmp;
}
a\_m = abs(a) a\_s = copysign(1.0, a) function code(a_s, a_m, k, m) t_0 = Float64((k ^ m) * a_m) tmp = 0.0 if (Float64(t_0 / Float64(Float64(k * k) + Float64(Float64(10.0 * k) + 1.0))) <= 1e+278) tmp = Float64(Float64((k ^ m) / fma(Float64(10.0 + k), k, 1.0)) * a_m); else tmp = t_0; end return Float64(a_s * tmp) end
a\_m = N[Abs[a], $MachinePrecision]
a\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[a]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[a$95$s_, a$95$m_, k_, m_] := Block[{t$95$0 = N[(N[Power[k, m], $MachinePrecision] * a$95$m), $MachinePrecision]}, N[(a$95$s * If[LessEqual[N[(t$95$0 / N[(N[(k * k), $MachinePrecision] + N[(N[(10.0 * k), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 1e+278], N[(N[(N[Power[k, m], $MachinePrecision] / N[(N[(10.0 + k), $MachinePrecision] * k + 1.0), $MachinePrecision]), $MachinePrecision] * a$95$m), $MachinePrecision], t$95$0]), $MachinePrecision]]
\begin{array}{l}
a\_m = \left|a\right|
\\
a\_s = \mathsf{copysign}\left(1, a\right)
\\
\begin{array}{l}
t_0 := {k}^{m} \cdot a\_m\\
a\_s \cdot \begin{array}{l}
\mathbf{if}\;\frac{t\_0}{k \cdot k + \left(10 \cdot k + 1\right)} \leq 10^{+278}:\\
\;\;\;\;\frac{{k}^{m}}{\mathsf{fma}\left(10 + k, k, 1\right)} \cdot a\_m\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\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))) < 9.99999999999999964e277Initial program 97.7%
lift-/.f64N/A
lift-*.f64N/A
associate-/l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f6497.6
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-+.f6497.6
Applied rewrites97.6%
if 9.99999999999999964e277 < (/.f64 (*.f64 a (pow.f64 k m)) (+.f64 (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 10 binary64) k)) (*.f64 k k))) Initial program 51.0%
Taylor expanded in k around 0
*-commutativeN/A
lower-*.f64N/A
lower-pow.f64100.0
Applied rewrites100.0%
Final simplification98.1%
a\_m = (fabs.f64 a)
a\_s = (copysign.f64 #s(literal 1 binary64) a)
(FPCore (a_s a_m k m)
:precision binary64
(*
a_s
(if (<= m 9.5e-6)
(/ a_m (/ (fma (+ 10.0 k) k 1.0) (pow k m)))
(* (pow k m) a_m))))a\_m = fabs(a);
a\_s = copysign(1.0, a);
double code(double a_s, double a_m, double k, double m) {
double tmp;
if (m <= 9.5e-6) {
tmp = a_m / (fma((10.0 + k), k, 1.0) / pow(k, m));
} else {
tmp = pow(k, m) * a_m;
}
return a_s * tmp;
}
a\_m = abs(a) a\_s = copysign(1.0, a) function code(a_s, a_m, k, m) tmp = 0.0 if (m <= 9.5e-6) tmp = Float64(a_m / Float64(fma(Float64(10.0 + k), k, 1.0) / (k ^ m))); else tmp = Float64((k ^ m) * a_m); end return Float64(a_s * tmp) end
a\_m = N[Abs[a], $MachinePrecision]
a\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[a]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[a$95$s_, a$95$m_, k_, m_] := N[(a$95$s * If[LessEqual[m, 9.5e-6], N[(a$95$m / N[(N[(N[(10.0 + k), $MachinePrecision] * k + 1.0), $MachinePrecision] / N[Power[k, m], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[Power[k, m], $MachinePrecision] * a$95$m), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
a\_m = \left|a\right|
\\
a\_s = \mathsf{copysign}\left(1, a\right)
\\
a\_s \cdot \begin{array}{l}
\mathbf{if}\;m \leq 9.5 \cdot 10^{-6}:\\
\;\;\;\;\frac{a\_m}{\frac{\mathsf{fma}\left(10 + k, k, 1\right)}{{k}^{m}}}\\
\mathbf{else}:\\
\;\;\;\;{k}^{m} \cdot a\_m\\
\end{array}
\end{array}
if m < 9.5000000000000005e-6Initial program 97.0%
lift-/.f64N/A
lift-*.f64N/A
associate-/l*N/A
clear-numN/A
un-div-invN/A
lower-/.f64N/A
lower-/.f6497.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-+.f6497.0
Applied rewrites97.0%
if 9.5000000000000005e-6 < m Initial program 74.2%
Taylor expanded in k around 0
*-commutativeN/A
lower-*.f64N/A
lower-pow.f64100.0
Applied rewrites100.0%
Final simplification98.1%
a\_m = (fabs.f64 a) a\_s = (copysign.f64 #s(literal 1 binary64) a) (FPCore (a_s a_m k m) :precision binary64 (let* ((t_0 (* (pow k m) a_m))) (* a_s (if (<= m 9.5e-6) (/ t_0 (fma k 10.0 (fma k k 1.0))) t_0))))
a\_m = fabs(a);
a\_s = copysign(1.0, a);
double code(double a_s, double a_m, double k, double m) {
double t_0 = pow(k, m) * a_m;
double tmp;
if (m <= 9.5e-6) {
tmp = t_0 / fma(k, 10.0, fma(k, k, 1.0));
} else {
tmp = t_0;
}
return a_s * tmp;
}
a\_m = abs(a) a\_s = copysign(1.0, a) function code(a_s, a_m, k, m) t_0 = Float64((k ^ m) * a_m) tmp = 0.0 if (m <= 9.5e-6) tmp = Float64(t_0 / fma(k, 10.0, fma(k, k, 1.0))); else tmp = t_0; end return Float64(a_s * tmp) end
a\_m = N[Abs[a], $MachinePrecision]
a\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[a]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[a$95$s_, a$95$m_, k_, m_] := Block[{t$95$0 = N[(N[Power[k, m], $MachinePrecision] * a$95$m), $MachinePrecision]}, N[(a$95$s * If[LessEqual[m, 9.5e-6], N[(t$95$0 / N[(k * 10.0 + N[(k * k + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]), $MachinePrecision]]
\begin{array}{l}
a\_m = \left|a\right|
\\
a\_s = \mathsf{copysign}\left(1, a\right)
\\
\begin{array}{l}
t_0 := {k}^{m} \cdot a\_m\\
a\_s \cdot \begin{array}{l}
\mathbf{if}\;m \leq 9.5 \cdot 10^{-6}:\\
\;\;\;\;\frac{t\_0}{\mathsf{fma}\left(k, 10, \mathsf{fma}\left(k, k, 1\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
\end{array}
if m < 9.5000000000000005e-6Initial program 97.0%
lift-+.f64N/A
lift-+.f64N/A
+-commutativeN/A
associate-+l+N/A
lift-*.f64N/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lift-*.f64N/A
lower-fma.f6497.0
Applied rewrites97.0%
if 9.5000000000000005e-6 < m Initial program 74.2%
Taylor expanded in k around 0
*-commutativeN/A
lower-*.f64N/A
lower-pow.f64100.0
Applied rewrites100.0%
Final simplification98.1%
a\_m = (fabs.f64 a)
a\_s = (copysign.f64 #s(literal 1 binary64) a)
(FPCore (a_s a_m k m)
:precision binary64
(*
a_s
(if (<= m -1.45e-11)
(/ (pow k m) (/ 1.0 a_m))
(if (<= m 5.1e-10) (/ a_m (fma (+ 10.0 k) k 1.0)) (* (pow k m) a_m)))))a\_m = fabs(a);
a\_s = copysign(1.0, a);
double code(double a_s, double a_m, double k, double m) {
double tmp;
if (m <= -1.45e-11) {
tmp = pow(k, m) / (1.0 / a_m);
} else if (m <= 5.1e-10) {
tmp = a_m / fma((10.0 + k), k, 1.0);
} else {
tmp = pow(k, m) * a_m;
}
return a_s * tmp;
}
a\_m = abs(a) a\_s = copysign(1.0, a) function code(a_s, a_m, k, m) tmp = 0.0 if (m <= -1.45e-11) tmp = Float64((k ^ m) / Float64(1.0 / a_m)); elseif (m <= 5.1e-10) tmp = Float64(a_m / fma(Float64(10.0 + k), k, 1.0)); else tmp = Float64((k ^ m) * a_m); end return Float64(a_s * tmp) end
a\_m = N[Abs[a], $MachinePrecision]
a\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[a]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[a$95$s_, a$95$m_, k_, m_] := N[(a$95$s * If[LessEqual[m, -1.45e-11], N[(N[Power[k, m], $MachinePrecision] / N[(1.0 / a$95$m), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 5.1e-10], N[(a$95$m / N[(N[(10.0 + k), $MachinePrecision] * k + 1.0), $MachinePrecision]), $MachinePrecision], N[(N[Power[k, m], $MachinePrecision] * a$95$m), $MachinePrecision]]]), $MachinePrecision]
\begin{array}{l}
a\_m = \left|a\right|
\\
a\_s = \mathsf{copysign}\left(1, a\right)
\\
a\_s \cdot \begin{array}{l}
\mathbf{if}\;m \leq -1.45 \cdot 10^{-11}:\\
\;\;\;\;\frac{{k}^{m}}{\frac{1}{a\_m}}\\
\mathbf{elif}\;m \leq 5.1 \cdot 10^{-10}:\\
\;\;\;\;\frac{a\_m}{\mathsf{fma}\left(10 + k, k, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;{k}^{m} \cdot a\_m\\
\end{array}
\end{array}
if m < -1.45e-11Initial program 100.0%
lift-+.f64N/A
lift-+.f64N/A
+-commutativeN/A
associate-+l+N/A
lift-*.f64N/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lift-*.f64N/A
lower-fma.f64100.0
Applied rewrites100.0%
lift-/.f64N/A
lift-*.f64N/A
*-commutativeN/A
lift-fma.f64N/A
*-commutativeN/A
lift-fma.f64N/A
lift-*.f64N/A
+-commutativeN/A
associate-+r+N/A
+-commutativeN/A
lift-*.f64N/A
associate-/l*N/A
lift-*.f64N/A
+-commutativeN/A
+-commutativeN/A
associate-+r+N/A
lift-*.f64N/A
distribute-rgt-inN/A
+-commutativeN/A
lift-+.f64N/A
*-commutativeN/A
lift-fma.f64N/A
Applied rewrites100.0%
Taylor expanded in k around 0
Applied rewrites100.0%
if -1.45e-11 < m < 5.09999999999999997e-10Initial program 94.8%
Taylor expanded in m around 0
lower-/.f64N/A
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites94.4%
if 5.09999999999999997e-10 < m Initial program 74.2%
Taylor expanded in k around 0
*-commutativeN/A
lower-*.f64N/A
lower-pow.f64100.0
Applied rewrites100.0%
a\_m = (fabs.f64 a)
a\_s = (copysign.f64 #s(literal 1 binary64) a)
(FPCore (a_s a_m k m)
:precision binary64
(let* ((t_0 (* (pow k m) a_m)))
(*
a_s
(if (<= m -1.45e-11)
t_0
(if (<= m 5.1e-10) (/ a_m (fma (+ 10.0 k) k 1.0)) t_0)))))a\_m = fabs(a);
a\_s = copysign(1.0, a);
double code(double a_s, double a_m, double k, double m) {
double t_0 = pow(k, m) * a_m;
double tmp;
if (m <= -1.45e-11) {
tmp = t_0;
} else if (m <= 5.1e-10) {
tmp = a_m / fma((10.0 + k), k, 1.0);
} else {
tmp = t_0;
}
return a_s * tmp;
}
a\_m = abs(a) a\_s = copysign(1.0, a) function code(a_s, a_m, k, m) t_0 = Float64((k ^ m) * a_m) tmp = 0.0 if (m <= -1.45e-11) tmp = t_0; elseif (m <= 5.1e-10) tmp = Float64(a_m / fma(Float64(10.0 + k), k, 1.0)); else tmp = t_0; end return Float64(a_s * tmp) end
a\_m = N[Abs[a], $MachinePrecision]
a\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[a]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[a$95$s_, a$95$m_, k_, m_] := Block[{t$95$0 = N[(N[Power[k, m], $MachinePrecision] * a$95$m), $MachinePrecision]}, N[(a$95$s * If[LessEqual[m, -1.45e-11], t$95$0, If[LessEqual[m, 5.1e-10], N[(a$95$m / N[(N[(10.0 + k), $MachinePrecision] * k + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]), $MachinePrecision]]
\begin{array}{l}
a\_m = \left|a\right|
\\
a\_s = \mathsf{copysign}\left(1, a\right)
\\
\begin{array}{l}
t_0 := {k}^{m} \cdot a\_m\\
a\_s \cdot \begin{array}{l}
\mathbf{if}\;m \leq -1.45 \cdot 10^{-11}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;m \leq 5.1 \cdot 10^{-10}:\\
\;\;\;\;\frac{a\_m}{\mathsf{fma}\left(10 + k, k, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
\end{array}
if m < -1.45e-11 or 5.09999999999999997e-10 < m Initial program 85.4%
Taylor expanded in k around 0
*-commutativeN/A
lower-*.f64N/A
lower-pow.f64100.0
Applied rewrites100.0%
if -1.45e-11 < m < 5.09999999999999997e-10Initial program 94.8%
Taylor expanded in m around 0
lower-/.f64N/A
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites94.4%
a\_m = (fabs.f64 a)
a\_s = (copysign.f64 #s(literal 1 binary64) a)
(FPCore (a_s a_m k m)
:precision binary64
(*
a_s
(if (<= m -0.21)
(/ (fma (/ a_m k) (+ (/ 99.0 k) -10.0) a_m) (* k k))
(if (<= m 128000000.0)
(/ a_m (fma (+ 10.0 k) k 1.0))
(fma (* (fma 99.0 k -10.0) a_m) k a_m)))))a\_m = fabs(a);
a\_s = copysign(1.0, a);
double code(double a_s, double a_m, double k, double m) {
double tmp;
if (m <= -0.21) {
tmp = fma((a_m / k), ((99.0 / k) + -10.0), a_m) / (k * k);
} else if (m <= 128000000.0) {
tmp = a_m / fma((10.0 + k), k, 1.0);
} else {
tmp = fma((fma(99.0, k, -10.0) * a_m), k, a_m);
}
return a_s * tmp;
}
a\_m = abs(a) a\_s = copysign(1.0, a) function code(a_s, a_m, k, m) tmp = 0.0 if (m <= -0.21) tmp = Float64(fma(Float64(a_m / k), Float64(Float64(99.0 / k) + -10.0), a_m) / Float64(k * k)); elseif (m <= 128000000.0) tmp = Float64(a_m / fma(Float64(10.0 + k), k, 1.0)); else tmp = fma(Float64(fma(99.0, k, -10.0) * a_m), k, a_m); end return Float64(a_s * tmp) end
a\_m = N[Abs[a], $MachinePrecision]
a\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[a]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[a$95$s_, a$95$m_, k_, m_] := N[(a$95$s * If[LessEqual[m, -0.21], N[(N[(N[(a$95$m / k), $MachinePrecision] * N[(N[(99.0 / k), $MachinePrecision] + -10.0), $MachinePrecision] + a$95$m), $MachinePrecision] / N[(k * k), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 128000000.0], N[(a$95$m / N[(N[(10.0 + k), $MachinePrecision] * k + 1.0), $MachinePrecision]), $MachinePrecision], N[(N[(N[(99.0 * k + -10.0), $MachinePrecision] * a$95$m), $MachinePrecision] * k + a$95$m), $MachinePrecision]]]), $MachinePrecision]
\begin{array}{l}
a\_m = \left|a\right|
\\
a\_s = \mathsf{copysign}\left(1, a\right)
\\
a\_s \cdot \begin{array}{l}
\mathbf{if}\;m \leq -0.21:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{a\_m}{k}, \frac{99}{k} + -10, a\_m\right)}{k \cdot k}\\
\mathbf{elif}\;m \leq 128000000:\\
\;\;\;\;\frac{a\_m}{\mathsf{fma}\left(10 + k, k, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(99, k, -10\right) \cdot a\_m, k, a\_m\right)\\
\end{array}
\end{array}
if m < -0.209999999999999992Initial program 100.0%
Taylor expanded in m around 0
lower-/.f64N/A
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites28.2%
Taylor expanded in k around 0
Applied rewrites3.7%
Taylor expanded in k around inf
Applied rewrites68.2%
if -0.209999999999999992 < m < 1.28e8Initial program 95.0%
Taylor expanded in m around 0
lower-/.f64N/A
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites91.5%
if 1.28e8 < m Initial program 73.6%
Taylor expanded in m around 0
lower-/.f64N/A
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites3.0%
Taylor expanded in k around 0
Applied rewrites9.5%
Taylor expanded in k around 0
Applied rewrites28.6%
Final simplification62.9%
a\_m = (fabs.f64 a)
a\_s = (copysign.f64 #s(literal 1 binary64) a)
(FPCore (a_s a_m k m)
:precision binary64
(*
a_s
(if (<= m -0.21)
(/ a_m (* k k))
(if (<= m 128000000.0)
(/ a_m (fma (+ 10.0 k) k 1.0))
(fma (* (fma 99.0 k -10.0) a_m) k a_m)))))a\_m = fabs(a);
a\_s = copysign(1.0, a);
double code(double a_s, double a_m, double k, double m) {
double tmp;
if (m <= -0.21) {
tmp = a_m / (k * k);
} else if (m <= 128000000.0) {
tmp = a_m / fma((10.0 + k), k, 1.0);
} else {
tmp = fma((fma(99.0, k, -10.0) * a_m), k, a_m);
}
return a_s * tmp;
}
a\_m = abs(a) a\_s = copysign(1.0, a) function code(a_s, a_m, k, m) tmp = 0.0 if (m <= -0.21) tmp = Float64(a_m / Float64(k * k)); elseif (m <= 128000000.0) tmp = Float64(a_m / fma(Float64(10.0 + k), k, 1.0)); else tmp = fma(Float64(fma(99.0, k, -10.0) * a_m), k, a_m); end return Float64(a_s * tmp) end
a\_m = N[Abs[a], $MachinePrecision]
a\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[a]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[a$95$s_, a$95$m_, k_, m_] := N[(a$95$s * If[LessEqual[m, -0.21], N[(a$95$m / N[(k * k), $MachinePrecision]), $MachinePrecision], If[LessEqual[m, 128000000.0], N[(a$95$m / N[(N[(10.0 + k), $MachinePrecision] * k + 1.0), $MachinePrecision]), $MachinePrecision], N[(N[(N[(99.0 * k + -10.0), $MachinePrecision] * a$95$m), $MachinePrecision] * k + a$95$m), $MachinePrecision]]]), $MachinePrecision]
\begin{array}{l}
a\_m = \left|a\right|
\\
a\_s = \mathsf{copysign}\left(1, a\right)
\\
a\_s \cdot \begin{array}{l}
\mathbf{if}\;m \leq -0.21:\\
\;\;\;\;\frac{a\_m}{k \cdot k}\\
\mathbf{elif}\;m \leq 128000000:\\
\;\;\;\;\frac{a\_m}{\mathsf{fma}\left(10 + k, k, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(99, k, -10\right) \cdot a\_m, k, a\_m\right)\\
\end{array}
\end{array}
if m < -0.209999999999999992Initial program 100.0%
Taylor expanded in m around 0
lower-/.f64N/A
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites28.2%
Taylor expanded in k around inf
Applied rewrites57.2%
if -0.209999999999999992 < m < 1.28e8Initial program 95.0%
Taylor expanded in m around 0
lower-/.f64N/A
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites91.5%
if 1.28e8 < m Initial program 73.6%
Taylor expanded in m around 0
lower-/.f64N/A
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites3.0%
Taylor expanded in k around 0
Applied rewrites9.5%
Taylor expanded in k around 0
Applied rewrites28.6%
Final simplification59.9%
a\_m = (fabs.f64 a)
a\_s = (copysign.f64 #s(literal 1 binary64) a)
(FPCore (a_s a_m k m)
:precision binary64
(let* ((t_0 (/ a_m (* k k))))
(*
a_s
(if (<= k -1.35e-303)
t_0
(if (<= k 3.7e-9) (fma (* -10.0 k) a_m a_m) t_0)))))a\_m = fabs(a);
a\_s = copysign(1.0, a);
double code(double a_s, double a_m, double k, double m) {
double t_0 = a_m / (k * k);
double tmp;
if (k <= -1.35e-303) {
tmp = t_0;
} else if (k <= 3.7e-9) {
tmp = fma((-10.0 * k), a_m, a_m);
} else {
tmp = t_0;
}
return a_s * tmp;
}
a\_m = abs(a) a\_s = copysign(1.0, a) function code(a_s, a_m, k, m) t_0 = Float64(a_m / Float64(k * k)) tmp = 0.0 if (k <= -1.35e-303) tmp = t_0; elseif (k <= 3.7e-9) tmp = fma(Float64(-10.0 * k), a_m, a_m); else tmp = t_0; end return Float64(a_s * tmp) end
a\_m = N[Abs[a], $MachinePrecision]
a\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[a]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[a$95$s_, a$95$m_, k_, m_] := Block[{t$95$0 = N[(a$95$m / N[(k * k), $MachinePrecision]), $MachinePrecision]}, N[(a$95$s * If[LessEqual[k, -1.35e-303], t$95$0, If[LessEqual[k, 3.7e-9], N[(N[(-10.0 * k), $MachinePrecision] * a$95$m + a$95$m), $MachinePrecision], t$95$0]]), $MachinePrecision]]
\begin{array}{l}
a\_m = \left|a\right|
\\
a\_s = \mathsf{copysign}\left(1, a\right)
\\
\begin{array}{l}
t_0 := \frac{a\_m}{k \cdot k}\\
a\_s \cdot \begin{array}{l}
\mathbf{if}\;k \leq -1.35 \cdot 10^{-303}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;k \leq 3.7 \cdot 10^{-9}:\\
\;\;\;\;\mathsf{fma}\left(-10 \cdot k, a\_m, a\_m\right)\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
\end{array}
if k < -1.34999999999999993e-303 or 3.7e-9 < k Initial program 82.1%
Taylor expanded in m around 0
lower-/.f64N/A
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites37.8%
Taylor expanded in k around inf
Applied rewrites45.8%
if -1.34999999999999993e-303 < k < 3.7e-9Initial program 100.0%
Taylor expanded in m around 0
lower-/.f64N/A
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites51.7%
Taylor expanded in k around 0
Applied rewrites51.7%
Applied rewrites51.7%
Final simplification48.0%
a\_m = (fabs.f64 a) a\_s = (copysign.f64 #s(literal 1 binary64) a) (FPCore (a_s a_m k m) :precision binary64 (* a_s (if (<= m 92.0) (* 1.0 a_m) (* (* -10.0 a_m) k))))
a\_m = fabs(a);
a\_s = copysign(1.0, a);
double code(double a_s, double a_m, double k, double m) {
double tmp;
if (m <= 92.0) {
tmp = 1.0 * a_m;
} else {
tmp = (-10.0 * a_m) * k;
}
return a_s * tmp;
}
a\_m = abs(a)
a\_s = copysign(1.0d0, a)
real(8) function code(a_s, a_m, k, m)
real(8), intent (in) :: a_s
real(8), intent (in) :: a_m
real(8), intent (in) :: k
real(8), intent (in) :: m
real(8) :: tmp
if (m <= 92.0d0) then
tmp = 1.0d0 * a_m
else
tmp = ((-10.0d0) * a_m) * k
end if
code = a_s * tmp
end function
a\_m = Math.abs(a);
a\_s = Math.copySign(1.0, a);
public static double code(double a_s, double a_m, double k, double m) {
double tmp;
if (m <= 92.0) {
tmp = 1.0 * a_m;
} else {
tmp = (-10.0 * a_m) * k;
}
return a_s * tmp;
}
a\_m = math.fabs(a) a\_s = math.copysign(1.0, a) def code(a_s, a_m, k, m): tmp = 0 if m <= 92.0: tmp = 1.0 * a_m else: tmp = (-10.0 * a_m) * k return a_s * tmp
a\_m = abs(a) a\_s = copysign(1.0, a) function code(a_s, a_m, k, m) tmp = 0.0 if (m <= 92.0) tmp = Float64(1.0 * a_m); else tmp = Float64(Float64(-10.0 * a_m) * k); end return Float64(a_s * tmp) end
a\_m = abs(a); a\_s = sign(a) * abs(1.0); function tmp_2 = code(a_s, a_m, k, m) tmp = 0.0; if (m <= 92.0) tmp = 1.0 * a_m; else tmp = (-10.0 * a_m) * k; end tmp_2 = a_s * tmp; end
a\_m = N[Abs[a], $MachinePrecision]
a\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[a]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[a$95$s_, a$95$m_, k_, m_] := N[(a$95$s * If[LessEqual[m, 92.0], N[(1.0 * a$95$m), $MachinePrecision], N[(N[(-10.0 * a$95$m), $MachinePrecision] * k), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
a\_m = \left|a\right|
\\
a\_s = \mathsf{copysign}\left(1, a\right)
\\
a\_s \cdot \begin{array}{l}
\mathbf{if}\;m \leq 92:\\
\;\;\;\;1 \cdot a\_m\\
\mathbf{else}:\\
\;\;\;\;\left(-10 \cdot a\_m\right) \cdot k\\
\end{array}
\end{array}
if m < 92Initial program 97.1%
lift-+.f64N/A
lift-+.f64N/A
+-commutativeN/A
associate-+l+N/A
lift-*.f64N/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lift-*.f64N/A
lower-fma.f6497.1
Applied rewrites97.1%
lift-/.f64N/A
lift-*.f64N/A
*-commutativeN/A
lift-fma.f64N/A
*-commutativeN/A
lift-fma.f64N/A
lift-*.f64N/A
+-commutativeN/A
associate-+r+N/A
+-commutativeN/A
lift-*.f64N/A
associate-/l*N/A
lift-*.f64N/A
+-commutativeN/A
+-commutativeN/A
associate-+r+N/A
lift-*.f64N/A
distribute-rgt-inN/A
+-commutativeN/A
lift-+.f64N/A
*-commutativeN/A
lift-fma.f64N/A
Applied rewrites96.5%
Taylor expanded in k around 0
*-commutativeN/A
lower-*.f64N/A
lower-pow.f6473.2
Applied rewrites73.2%
Taylor expanded in m around 0
Applied rewrites31.6%
if 92 < m Initial program 73.9%
Taylor expanded in m around 0
lower-/.f64N/A
associate-+r+N/A
+-commutativeN/A
+-commutativeN/A
metadata-evalN/A
lft-mult-inverseN/A
associate-*l*N/A
associate-*r*N/A
unpow2N/A
lft-mult-inverseN/A
distribute-rgt-inN/A
*-rgt-identityN/A
distribute-lft-inN/A
associate-+r+N/A
distribute-rgt-inN/A
unpow2N/A
associate-*r*N/A
lft-mult-inverseN/A
lower-fma.f64N/A
Applied rewrites3.1%
Taylor expanded in k around 0
Applied rewrites9.5%
Taylor expanded in k around inf
Applied rewrites22.3%
Applied rewrites22.3%
a\_m = (fabs.f64 a) a\_s = (copysign.f64 #s(literal 1 binary64) a) (FPCore (a_s a_m k m) :precision binary64 (* a_s (* 1.0 a_m)))
a\_m = fabs(a);
a\_s = copysign(1.0, a);
double code(double a_s, double a_m, double k, double m) {
return a_s * (1.0 * a_m);
}
a\_m = abs(a)
a\_s = copysign(1.0d0, a)
real(8) function code(a_s, a_m, k, m)
real(8), intent (in) :: a_s
real(8), intent (in) :: a_m
real(8), intent (in) :: k
real(8), intent (in) :: m
code = a_s * (1.0d0 * a_m)
end function
a\_m = Math.abs(a);
a\_s = Math.copySign(1.0, a);
public static double code(double a_s, double a_m, double k, double m) {
return a_s * (1.0 * a_m);
}
a\_m = math.fabs(a) a\_s = math.copysign(1.0, a) def code(a_s, a_m, k, m): return a_s * (1.0 * a_m)
a\_m = abs(a) a\_s = copysign(1.0, a) function code(a_s, a_m, k, m) return Float64(a_s * Float64(1.0 * a_m)) end
a\_m = abs(a); a\_s = sign(a) * abs(1.0); function tmp = code(a_s, a_m, k, m) tmp = a_s * (1.0 * a_m); end
a\_m = N[Abs[a], $MachinePrecision]
a\_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[a]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[a$95$s_, a$95$m_, k_, m_] := N[(a$95$s * N[(1.0 * a$95$m), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
a\_m = \left|a\right|
\\
a\_s = \mathsf{copysign}\left(1, a\right)
\\
a\_s \cdot \left(1 \cdot a\_m\right)
\end{array}
Initial program 88.7%
lift-+.f64N/A
lift-+.f64N/A
+-commutativeN/A
associate-+l+N/A
lift-*.f64N/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lift-*.f64N/A
lower-fma.f6488.7
Applied rewrites88.7%
lift-/.f64N/A
lift-*.f64N/A
*-commutativeN/A
lift-fma.f64N/A
*-commutativeN/A
lift-fma.f64N/A
lift-*.f64N/A
+-commutativeN/A
associate-+r+N/A
+-commutativeN/A
lift-*.f64N/A
associate-/l*N/A
lift-*.f64N/A
+-commutativeN/A
+-commutativeN/A
associate-+r+N/A
lift-*.f64N/A
distribute-rgt-inN/A
+-commutativeN/A
lift-+.f64N/A
*-commutativeN/A
lift-fma.f64N/A
Applied rewrites87.2%
Taylor expanded in k around 0
*-commutativeN/A
lower-*.f64N/A
lower-pow.f6482.8
Applied rewrites82.8%
Taylor expanded in m around 0
Applied rewrites21.6%
herbie shell --seed 2024250
(FPCore (a k m)
:name "Falkner and Boettcher, Appendix A"
:precision binary64
(/ (* a (pow k m)) (+ (+ 1.0 (* 10.0 k)) (* k k))))