Average Error: 0.2 → 0.2
Time: 6.4s
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(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, {\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, 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({\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, {\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, 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 r145746 = a;
        double r145747 = r145746 * r145746;
        double r145748 = b;
        double r145749 = r145748 * r145748;
        double r145750 = r145747 + r145749;
        double r145751 = 2.0;
        double r145752 = pow(r145750, r145751);
        double r145753 = 4.0;
        double r145754 = 1.0;
        double r145755 = r145754 + r145746;
        double r145756 = r145747 * r145755;
        double r145757 = 3.0;
        double r145758 = r145757 * r145746;
        double r145759 = r145754 - r145758;
        double r145760 = r145749 * r145759;
        double r145761 = r145756 + r145760;
        double r145762 = r145753 * r145761;
        double r145763 = r145752 + r145762;
        double r145764 = r145763 - r145754;
        return r145764;
}

double f(double a, double b) {
        double r145765 = a;
        double r145766 = r145765 * r145765;
        double r145767 = b;
        double r145768 = r145767 * r145767;
        double r145769 = r145766 + r145768;
        double r145770 = 2.0;
        double r145771 = 2.0;
        double r145772 = r145770 / r145771;
        double r145773 = pow(r145769, r145772);
        double r145774 = 4.0;
        double r145775 = 1.0;
        double r145776 = r145775 + r145765;
        double r145777 = r145766 * r145776;
        double r145778 = 3.0;
        double r145779 = r145778 * r145765;
        double r145780 = r145775 - r145779;
        double r145781 = r145768 * r145780;
        double r145782 = r145777 + r145781;
        double r145783 = r145774 * r145782;
        double r145784 = fma(r145773, r145773, r145783);
        double r145785 = r145784 - r145775;
        return r145785;
}

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 sqr-pow0.2

    \[\leadsto \left(\color{blue}{{\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)} \cdot {\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}} + 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({\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, {\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, 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({\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, {\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, 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 2020025 +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))