Average Error: 0.2 → 0.0
Time: 20.3s
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(\mathsf{fma}\left(b \cdot b, 1 - 3 \cdot a, \mathsf{fma}\left(a \cdot a, a, a \cdot a\right)\right), 4, \mathsf{fma}\left(\left(a \cdot b\right) \cdot \left(a \cdot b\right), 2, {b}^{4} + {a}^{4}\right) - 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(\mathsf{fma}\left(b \cdot b, 1 - 3 \cdot a, \mathsf{fma}\left(a \cdot a, a, a \cdot a\right)\right), 4, \mathsf{fma}\left(\left(a \cdot b\right) \cdot \left(a \cdot b\right), 2, {b}^{4} + {a}^{4}\right) - 1\right)
double f(double a, double b) {
        double r4681495 = a;
        double r4681496 = r4681495 * r4681495;
        double r4681497 = b;
        double r4681498 = r4681497 * r4681497;
        double r4681499 = r4681496 + r4681498;
        double r4681500 = 2.0;
        double r4681501 = pow(r4681499, r4681500);
        double r4681502 = 4.0;
        double r4681503 = 1.0;
        double r4681504 = r4681503 + r4681495;
        double r4681505 = r4681496 * r4681504;
        double r4681506 = 3.0;
        double r4681507 = r4681506 * r4681495;
        double r4681508 = r4681503 - r4681507;
        double r4681509 = r4681498 * r4681508;
        double r4681510 = r4681505 + r4681509;
        double r4681511 = r4681502 * r4681510;
        double r4681512 = r4681501 + r4681511;
        double r4681513 = r4681512 - r4681503;
        return r4681513;
}

double f(double a, double b) {
        double r4681514 = b;
        double r4681515 = r4681514 * r4681514;
        double r4681516 = 1.0;
        double r4681517 = 3.0;
        double r4681518 = a;
        double r4681519 = r4681517 * r4681518;
        double r4681520 = r4681516 - r4681519;
        double r4681521 = r4681518 * r4681518;
        double r4681522 = fma(r4681521, r4681518, r4681521);
        double r4681523 = fma(r4681515, r4681520, r4681522);
        double r4681524 = 4.0;
        double r4681525 = r4681518 * r4681514;
        double r4681526 = r4681525 * r4681525;
        double r4681527 = 2.0;
        double r4681528 = pow(r4681514, r4681524);
        double r4681529 = pow(r4681518, r4681524);
        double r4681530 = r4681528 + r4681529;
        double r4681531 = fma(r4681526, r4681527, r4681530);
        double r4681532 = r4681531 - r4681516;
        double r4681533 = fma(r4681523, r4681524, r4681532);
        return r4681533;
}

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(\mathsf{fma}\left(b \cdot b, 1 - 3 \cdot a, \mathsf{fma}\left(a \cdot a, a, a \cdot a\right)\right), 4, \mathsf{fma}\left(a, a, b \cdot b\right) \cdot \mathsf{fma}\left(a, a, b \cdot b\right) - 1\right)}\]
  3. Taylor expanded around -inf 0.0

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

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

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

Reproduce

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