Average Error: 2.1 → 2.2
Time: 7.1s
Precision: binary64
\[\frac{a \cdot {k}^{m}}{\left(1 + 10 \cdot k\right) + k \cdot k} \]
\[a \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(\frac{{k}^{m}}{\mathsf{fma}\left(k, k + 10, 1\right)}\right)\right) \]
(FPCore (a k m)
 :precision binary64
 (/ (* a (pow k m)) (+ (+ 1.0 (* 10.0 k)) (* k k))))
(FPCore (a k m)
 :precision binary64
 (* a (log1p (expm1 (/ (pow k m) (fma k (+ k 10.0) 1.0))))))
double code(double a, double k, double m) {
	return (a * pow(k, m)) / ((1.0 + (10.0 * k)) + (k * k));
}
double code(double a, double k, double m) {
	return a * log1p(expm1((pow(k, m) / fma(k, (k + 10.0), 1.0))));
}
function code(a, k, m)
	return Float64(Float64(a * (k ^ m)) / Float64(Float64(1.0 + Float64(10.0 * k)) + Float64(k * k)))
end
function code(a, k, m)
	return Float64(a * log1p(expm1(Float64((k ^ m) / fma(k, Float64(k + 10.0), 1.0)))))
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]
code[a_, k_, m_] := N[(a * N[Log[1 + N[(Exp[N[(N[Power[k, m], $MachinePrecision] / N[(k * N[(k + 10.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]] - 1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\frac{a \cdot {k}^{m}}{\left(1 + 10 \cdot k\right) + k \cdot k}
a \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(\frac{{k}^{m}}{\mathsf{fma}\left(k, k + 10, 1\right)}\right)\right)

Error

Bits error versus a

Bits error versus k

Bits error versus m

Derivation

  1. Initial program 2.1

    \[\frac{a \cdot {k}^{m}}{\left(1 + 10 \cdot k\right) + k \cdot k} \]
  2. Simplified2.1

    \[\leadsto \color{blue}{\frac{a \cdot {k}^{m}}{\mathsf{fma}\left(k, k + 10, 1\right)}} \]
  3. Applied egg-rr2.1

    \[\leadsto \color{blue}{a \cdot \frac{{k}^{m}}{\mathsf{fma}\left(k, k + 10, 1\right)}} \]
  4. Applied egg-rr2.2

    \[\leadsto a \cdot \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{{k}^{m}}{\mathsf{fma}\left(k, k + 10, 1\right)}\right)\right)} \]
  5. Final simplification2.2

    \[\leadsto a \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(\frac{{k}^{m}}{\mathsf{fma}\left(k, k + 10, 1\right)}\right)\right) \]

Reproduce

herbie shell --seed 2022131 
(FPCore (a k m)
  :name "Falkner and Boettcher, Appendix A"
  :precision binary64
  (/ (* a (pow k m)) (+ (+ 1.0 (* 10.0 k)) (* k k))))