Average Error: 0.2 → 0.2
Time: 6.7s
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 r242757 = a;
        double r242758 = r242757 * r242757;
        double r242759 = b;
        double r242760 = r242759 * r242759;
        double r242761 = r242758 + r242760;
        double r242762 = 2.0;
        double r242763 = pow(r242761, r242762);
        double r242764 = 4.0;
        double r242765 = 1.0;
        double r242766 = r242765 + r242757;
        double r242767 = r242758 * r242766;
        double r242768 = 3.0;
        double r242769 = r242768 * r242757;
        double r242770 = r242765 - r242769;
        double r242771 = r242760 * r242770;
        double r242772 = r242767 + r242771;
        double r242773 = r242764 * r242772;
        double r242774 = r242763 + r242773;
        double r242775 = r242774 - r242765;
        return r242775;
}

double f(double a, double b) {
        double r242776 = a;
        double r242777 = r242776 * r242776;
        double r242778 = b;
        double r242779 = r242778 * r242778;
        double r242780 = r242777 + r242779;
        double r242781 = 2.0;
        double r242782 = pow(r242780, r242781);
        double r242783 = sqrt(r242782);
        double r242784 = 4.0;
        double r242785 = 1.0;
        double r242786 = r242785 + r242776;
        double r242787 = r242777 * r242786;
        double r242788 = 3.0;
        double r242789 = r242788 * r242776;
        double r242790 = r242785 - r242789;
        double r242791 = r242779 * r242790;
        double r242792 = r242787 + r242791;
        double r242793 = r242784 * r242792;
        double r242794 = fma(r242783, r242783, r242793);
        double r242795 = r242794 - r242785;
        return r242795;
}

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 2020083 +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))