Average Error: 2.0 → 0.2
Time: 30.3s
Precision: 64
\[\frac{a \cdot {k}^{m}}{\left(1 + 10 \cdot k\right) + k \cdot k}\]
\[\begin{array}{l} \mathbf{if}\;k \le 8.663816625552649 \cdot 10^{+141}:\\ \;\;\;\;\frac{a \cdot {k}^{m}}{k \cdot k + \left(k \cdot 10 + 1\right)}\\ \mathbf{else}:\\ \;\;\;\;\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{{k}^{m}}{\left(\frac{k}{\frac{a}{k}} + \frac{1}{a}\right) + \frac{10}{\frac{a}{k}}}\right)\right)\\ \end{array}\]
\frac{a \cdot {k}^{m}}{\left(1 + 10 \cdot k\right) + k \cdot k}
\begin{array}{l}
\mathbf{if}\;k \le 8.663816625552649 \cdot 10^{+141}:\\
\;\;\;\;\frac{a \cdot {k}^{m}}{k \cdot k + \left(k \cdot 10 + 1\right)}\\

\mathbf{else}:\\
\;\;\;\;\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{{k}^{m}}{\left(\frac{k}{\frac{a}{k}} + \frac{1}{a}\right) + \frac{10}{\frac{a}{k}}}\right)\right)\\

\end{array}
double f(double a, double k, double m) {
        double r5182330 = a;
        double r5182331 = k;
        double r5182332 = m;
        double r5182333 = pow(r5182331, r5182332);
        double r5182334 = r5182330 * r5182333;
        double r5182335 = 1.0;
        double r5182336 = 10.0;
        double r5182337 = r5182336 * r5182331;
        double r5182338 = r5182335 + r5182337;
        double r5182339 = r5182331 * r5182331;
        double r5182340 = r5182338 + r5182339;
        double r5182341 = r5182334 / r5182340;
        return r5182341;
}

double f(double a, double k, double m) {
        double r5182342 = k;
        double r5182343 = 8.663816625552649e+141;
        bool r5182344 = r5182342 <= r5182343;
        double r5182345 = a;
        double r5182346 = m;
        double r5182347 = pow(r5182342, r5182346);
        double r5182348 = r5182345 * r5182347;
        double r5182349 = r5182342 * r5182342;
        double r5182350 = 10.0;
        double r5182351 = r5182342 * r5182350;
        double r5182352 = 1.0;
        double r5182353 = r5182351 + r5182352;
        double r5182354 = r5182349 + r5182353;
        double r5182355 = r5182348 / r5182354;
        double r5182356 = r5182345 / r5182342;
        double r5182357 = r5182342 / r5182356;
        double r5182358 = r5182352 / r5182345;
        double r5182359 = r5182357 + r5182358;
        double r5182360 = r5182350 / r5182356;
        double r5182361 = r5182359 + r5182360;
        double r5182362 = r5182347 / r5182361;
        double r5182363 = log1p(r5182362);
        double r5182364 = expm1(r5182363);
        double r5182365 = r5182344 ? r5182355 : r5182364;
        return r5182365;
}

Error

Bits error versus a

Bits error versus k

Bits error versus m

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 2 regimes
  2. if k < 8.663816625552649e+141

    1. Initial program 0.1

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

    if 8.663816625552649e+141 < k

    1. Initial program 9.8

      \[\frac{a \cdot {k}^{m}}{\left(1 + 10 \cdot k\right) + k \cdot k}\]
    2. Using strategy rm
    3. Applied expm1-log1p-u9.8

      \[\leadsto \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{a \cdot {k}^{m}}{\left(1 + 10 \cdot k\right) + k \cdot k}\right)\right)}\]
    4. Simplified9.8

      \[\leadsto \mathsf{expm1}\left(\color{blue}{\mathsf{log1p}\left(\frac{{k}^{m}}{\frac{\mathsf{fma}\left(k, k + 10, 1\right)}{a}}\right)}\right)\]
    5. Taylor expanded around 0 9.8

      \[\leadsto \mathsf{expm1}\left(\mathsf{log1p}\left(\frac{{k}^{m}}{\color{blue}{\frac{1}{a} + \left(\frac{{k}^{2}}{a} + 10 \cdot \frac{k}{a}\right)}}\right)\right)\]
    6. Simplified0.6

      \[\leadsto \mathsf{expm1}\left(\mathsf{log1p}\left(\frac{{k}^{m}}{\color{blue}{\left(\frac{k}{\frac{a}{k}} + \frac{1}{a}\right) + \frac{10}{\frac{a}{k}}}}\right)\right)\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;k \le 8.663816625552649 \cdot 10^{+141}:\\ \;\;\;\;\frac{a \cdot {k}^{m}}{k \cdot k + \left(k \cdot 10 + 1\right)}\\ \mathbf{else}:\\ \;\;\;\;\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{{k}^{m}}{\left(\frac{k}{\frac{a}{k}} + \frac{1}{a}\right) + \frac{10}{\frac{a}{k}}}\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019152 +o rules:numerics
(FPCore (a k m)
  :name "Falkner and Boettcher, Appendix A"
  (/ (* a (pow k m)) (+ (+ 1 (* 10 k)) (* k k))))