Average Error: 0.2 → 0.2
Time: 8.1s
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(\sqrt{{\left(a \cdot a + b \cdot b\right)}^{2}}, \sqrt{{\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\]
\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(\sqrt{{\left(a \cdot a + b \cdot b\right)}^{2}}, \sqrt{{\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
double f(double a, double b) {
        double r189640 = a;
        double r189641 = r189640 * r189640;
        double r189642 = b;
        double r189643 = r189642 * r189642;
        double r189644 = r189641 + r189643;
        double r189645 = 2.0;
        double r189646 = pow(r189644, r189645);
        double r189647 = 4.0;
        double r189648 = 1.0;
        double r189649 = r189648 + r189640;
        double r189650 = r189641 * r189649;
        double r189651 = 3.0;
        double r189652 = r189651 * r189640;
        double r189653 = r189648 - r189652;
        double r189654 = r189643 * r189653;
        double r189655 = r189650 + r189654;
        double r189656 = r189647 * r189655;
        double r189657 = r189646 + r189656;
        double r189658 = r189657 - r189648;
        return r189658;
}

double f(double a, double b) {
        double r189659 = a;
        double r189660 = r189659 * r189659;
        double r189661 = b;
        double r189662 = r189661 * r189661;
        double r189663 = r189660 + r189662;
        double r189664 = 2.0;
        double r189665 = pow(r189663, r189664);
        double r189666 = sqrt(r189665);
        double r189667 = 4.0;
        double r189668 = 1.0;
        double r189669 = r189668 + r189659;
        double r189670 = r189660 * r189669;
        double r189671 = 3.0;
        double r189672 = r189671 * r189659;
        double r189673 = r189668 - r189672;
        double r189674 = r189662 * r189673;
        double r189675 = r189670 + r189674;
        double r189676 = r189667 * r189675;
        double r189677 = fma(r189666, r189666, r189676);
        double r189678 = r189677 - r189668;
        return r189678;
}

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

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

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

Reproduce

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