Average Error: 0.2 → 0.2
Time: 19.9s
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(3 + a\right)\right)\right) - 1\]
\[\mathsf{fma}\left(a \cdot a + b \cdot b, a \cdot a + b \cdot b, \left(\left(a \cdot a\right) \cdot \left(1 - a\right) + \left(a + 3\right) \cdot \left(b \cdot b\right)\right) \cdot 4\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(3 + a\right)\right)\right) - 1
\mathsf{fma}\left(a \cdot a + b \cdot b, a \cdot a + b \cdot b, \left(\left(a \cdot a\right) \cdot \left(1 - a\right) + \left(a + 3\right) \cdot \left(b \cdot b\right)\right) \cdot 4\right) - 1
double f(double a, double b) {
        double r5145750 = a;
        double r5145751 = r5145750 * r5145750;
        double r5145752 = b;
        double r5145753 = r5145752 * r5145752;
        double r5145754 = r5145751 + r5145753;
        double r5145755 = 2.0;
        double r5145756 = pow(r5145754, r5145755);
        double r5145757 = 4.0;
        double r5145758 = 1.0;
        double r5145759 = r5145758 - r5145750;
        double r5145760 = r5145751 * r5145759;
        double r5145761 = 3.0;
        double r5145762 = r5145761 + r5145750;
        double r5145763 = r5145753 * r5145762;
        double r5145764 = r5145760 + r5145763;
        double r5145765 = r5145757 * r5145764;
        double r5145766 = r5145756 + r5145765;
        double r5145767 = r5145766 - r5145758;
        return r5145767;
}

double f(double a, double b) {
        double r5145768 = a;
        double r5145769 = r5145768 * r5145768;
        double r5145770 = b;
        double r5145771 = r5145770 * r5145770;
        double r5145772 = r5145769 + r5145771;
        double r5145773 = 1.0;
        double r5145774 = r5145773 - r5145768;
        double r5145775 = r5145769 * r5145774;
        double r5145776 = 3.0;
        double r5145777 = r5145768 + r5145776;
        double r5145778 = r5145777 * r5145771;
        double r5145779 = r5145775 + r5145778;
        double r5145780 = 4.0;
        double r5145781 = r5145779 * r5145780;
        double r5145782 = fma(r5145772, r5145772, r5145781);
        double r5145783 = r5145782 - r5145773;
        return r5145783;
}

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(3 + a\right)\right)\right) - 1\]
  2. Using strategy rm
  3. Applied unpow20.2

    \[\leadsto \left(\color{blue}{\left(a \cdot a + b \cdot b\right) \cdot \left(a \cdot a + b \cdot b\right)} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 - a\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1\]
  4. Applied fma-def0.2

    \[\leadsto \color{blue}{\mathsf{fma}\left(a \cdot a + b \cdot b, a \cdot a + b \cdot b, 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 - a\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right)} - 1\]
  5. Final simplification0.2

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

Reproduce

herbie shell --seed 2019138 +o rules:numerics
(FPCore (a b)
  :name "Bouland and Aaronson, Equation (24)"
  (- (+ (pow (+ (* a a) (* b b)) 2) (* 4 (+ (* (* a a) (- 1 a)) (* (* b b) (+ 3 a))))) 1))