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(\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 r136787 = a;
        double r136788 = r136787 * r136787;
        double r136789 = b;
        double r136790 = r136789 * r136789;
        double r136791 = r136788 + r136790;
        double r136792 = 2.0;
        double r136793 = pow(r136791, r136792);
        double r136794 = 4.0;
        double r136795 = 1.0;
        double r136796 = r136795 + r136787;
        double r136797 = r136788 * r136796;
        double r136798 = 3.0;
        double r136799 = r136798 * r136787;
        double r136800 = r136795 - r136799;
        double r136801 = r136790 * r136800;
        double r136802 = r136797 + r136801;
        double r136803 = r136794 * r136802;
        double r136804 = r136793 + r136803;
        double r136805 = r136804 - r136795;
        return r136805;
}

double f(double a, double b) {
        double r136806 = a;
        double r136807 = r136806 * r136806;
        double r136808 = b;
        double r136809 = r136808 * r136808;
        double r136810 = r136807 + r136809;
        double r136811 = 2.0;
        double r136812 = pow(r136810, r136811);
        double r136813 = sqrt(r136812);
        double r136814 = 4.0;
        double r136815 = 1.0;
        double r136816 = r136815 + r136806;
        double r136817 = r136807 * r136816;
        double r136818 = 3.0;
        double r136819 = r136818 * r136806;
        double r136820 = r136815 - r136819;
        double r136821 = r136809 * r136820;
        double r136822 = r136817 + r136821;
        double r136823 = r136814 * r136822;
        double r136824 = fma(r136813, r136813, r136823);
        double r136825 = r136824 - r136815;
        return r136825;
}

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