Average Error: 0.2 → 0.2
Time: 1.0m
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(\left({\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2}\right), \left({\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2}\right), \left(4 \cdot \left(\left(a + 1\right) \cdot \left(a \cdot a\right) + \left(1 - 3 \cdot a\right) \cdot \left(b \cdot b\right)\right)\right)\right) - 1\]
\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(\left({\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2}\right), \left({\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2}\right), \left(4 \cdot \left(\left(a + 1\right) \cdot \left(a \cdot a\right) + \left(1 - 3 \cdot a\right) \cdot \left(b \cdot b\right)\right)\right)\right) - 1
double f(double a, double b) {
        double r89360444 = a;
        double r89360445 = r89360444 * r89360444;
        double r89360446 = b;
        double r89360447 = r89360446 * r89360446;
        double r89360448 = r89360445 + r89360447;
        double r89360449 = 2.0;
        double r89360450 = pow(r89360448, r89360449);
        double r89360451 = 4.0;
        double r89360452 = 1.0;
        double r89360453 = r89360452 + r89360444;
        double r89360454 = r89360445 * r89360453;
        double r89360455 = 3.0;
        double r89360456 = r89360455 * r89360444;
        double r89360457 = r89360452 - r89360456;
        double r89360458 = r89360447 * r89360457;
        double r89360459 = r89360454 + r89360458;
        double r89360460 = r89360451 * r89360459;
        double r89360461 = r89360450 + r89360460;
        double r89360462 = r89360461 - r89360452;
        return r89360462;
}

double f(double a, double b) {
        double r89360463 = a;
        double r89360464 = r89360463 * r89360463;
        double r89360465 = b;
        double r89360466 = r89360465 * r89360465;
        double r89360467 = r89360464 + r89360466;
        double r89360468 = sqrt(r89360467);
        double r89360469 = 2.0;
        double r89360470 = pow(r89360468, r89360469);
        double r89360471 = 4.0;
        double r89360472 = 1.0;
        double r89360473 = r89360463 + r89360472;
        double r89360474 = r89360473 * r89360464;
        double r89360475 = 3.0;
        double r89360476 = r89360475 * r89360463;
        double r89360477 = r89360472 - r89360476;
        double r89360478 = r89360477 * r89360466;
        double r89360479 = r89360474 + r89360478;
        double r89360480 = r89360471 * r89360479;
        double r89360481 = fma(r89360470, r89360470, r89360480);
        double r89360482 = r89360481 - r89360472;
        return r89360482;
}

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. Using strategy rm
  3. Applied add-sqr-sqrt0.2

    \[\leadsto \left({\color{blue}{\left(\sqrt{a \cdot a + b \cdot b} \cdot \sqrt{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\]
  4. Applied unpow-prod-down0.2

    \[\leadsto \left(\color{blue}{{\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2} \cdot {\left(\sqrt{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\]
  5. Applied fma-def0.2

    \[\leadsto \color{blue}{\mathsf{fma}\left(\left({\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2}\right), \left({\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2}\right), \left(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)\right)} - 1\]
  6. Final simplification0.2

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

Reproduce

herbie shell --seed 2019125 +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))