Average Error: 0.2 → 0.2
Time: 6.6s
Precision: 64
\[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1\]
\[\mathsf{fma}\left(4, \mathsf{fma}\left(a \cdot a, 1 + a, \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right), {\left(a \cdot a + b \cdot b\right)}^{2} - 1\right)\]
\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1
\mathsf{fma}\left(4, \mathsf{fma}\left(a \cdot a, 1 + a, \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right), {\left(a \cdot a + b \cdot b\right)}^{2} - 1\right)
double f(double a, double b) {
        double r174514 = a;
        double r174515 = r174514 * r174514;
        double r174516 = b;
        double r174517 = r174516 * r174516;
        double r174518 = r174515 + r174517;
        double r174519 = 2.0;
        double r174520 = pow(r174518, r174519);
        double r174521 = 4.0;
        double r174522 = 1.0;
        double r174523 = r174522 + r174514;
        double r174524 = r174515 * r174523;
        double r174525 = 3.0;
        double r174526 = r174525 * r174514;
        double r174527 = r174522 - r174526;
        double r174528 = r174517 * r174527;
        double r174529 = r174524 + r174528;
        double r174530 = r174521 * r174529;
        double r174531 = r174520 + r174530;
        double r174532 = r174531 - r174522;
        return r174532;
}

double f(double a, double b) {
        double r174533 = 4.0;
        double r174534 = a;
        double r174535 = r174534 * r174534;
        double r174536 = 1.0;
        double r174537 = r174536 + r174534;
        double r174538 = b;
        double r174539 = r174538 * r174538;
        double r174540 = 3.0;
        double r174541 = r174540 * r174534;
        double r174542 = r174536 - r174541;
        double r174543 = r174539 * r174542;
        double r174544 = fma(r174535, r174537, r174543);
        double r174545 = r174535 + r174539;
        double r174546 = 2.0;
        double r174547 = pow(r174545, r174546);
        double r174548 = r174547 - r174536;
        double r174549 = fma(r174533, r174544, r174548);
        return r174549;
}

Error

Bits error versus a

Bits error versus b

Derivation

  1. Initial program 0.2

    \[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1\]
  2. Simplified0.2

    \[\leadsto \color{blue}{\mathsf{fma}\left(4, \mathsf{fma}\left(a \cdot a, 1 + a, \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right), {\left(a \cdot a + b \cdot b\right)}^{2} - 1\right)}\]
  3. Final simplification0.2

    \[\leadsto \mathsf{fma}\left(4, \mathsf{fma}\left(a \cdot a, 1 + a, \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right), {\left(a \cdot a + b \cdot b\right)}^{2} - 1\right)\]

Reproduce

herbie shell --seed 2020002 +o rules:numerics
(FPCore (a b)
  :name "Bouland and Aaronson, Equation (25)"
  :precision binary64
  (- (+ (pow (+ (* a a) (* b b)) 2) (* 4 (+ (* (* a a) (+ 1 a)) (* (* b b) (- 1 (* 3 a)))))) 1))