Average Error: 0.2 → 0.2
Time: 26.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({\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 r229740 = a;
        double r229741 = r229740 * r229740;
        double r229742 = b;
        double r229743 = r229742 * r229742;
        double r229744 = r229741 + r229743;
        double r229745 = 2.0;
        double r229746 = pow(r229744, r229745);
        double r229747 = 4.0;
        double r229748 = 1.0;
        double r229749 = r229748 + r229740;
        double r229750 = r229741 * r229749;
        double r229751 = 3.0;
        double r229752 = r229751 * r229740;
        double r229753 = r229748 - r229752;
        double r229754 = r229743 * r229753;
        double r229755 = r229750 + r229754;
        double r229756 = r229747 * r229755;
        double r229757 = r229746 + r229756;
        double r229758 = r229757 - r229748;
        return r229758;
}

double f(double a, double b) {
        double r229759 = a;
        double r229760 = r229759 * r229759;
        double r229761 = b;
        double r229762 = r229761 * r229761;
        double r229763 = r229760 + r229762;
        double r229764 = 2.0;
        double r229765 = 2.0;
        double r229766 = r229764 / r229765;
        double r229767 = pow(r229763, r229766);
        double r229768 = 4.0;
        double r229769 = 1.0;
        double r229770 = r229769 + r229759;
        double r229771 = r229760 * r229770;
        double r229772 = 3.0;
        double r229773 = r229772 * r229759;
        double r229774 = r229769 - r229773;
        double r229775 = r229762 * r229774;
        double r229776 = r229771 + r229775;
        double r229777 = r229768 * r229776;
        double r229778 = fma(r229767, r229767, r229777);
        double r229779 = r229778 - r229769;
        return r229779;
}

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