Average Error: 0.2 → 0.1
Time: 24.8s
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\]
\[\left(\mathsf{fma}\left(b \cdot b, b \cdot b, \mathsf{fma}\left(2, \left(b \cdot b\right) \cdot \left(a \cdot a\right), {a}^{4}\right)\right) + 4 \cdot \left(\left(1 - a \cdot 3\right) \cdot \left(b \cdot b\right) + \left(1 + a\right) \cdot \left(a \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
\left(\mathsf{fma}\left(b \cdot b, b \cdot b, \mathsf{fma}\left(2, \left(b \cdot b\right) \cdot \left(a \cdot a\right), {a}^{4}\right)\right) + 4 \cdot \left(\left(1 - a \cdot 3\right) \cdot \left(b \cdot b\right) + \left(1 + a\right) \cdot \left(a \cdot a\right)\right)\right) - 1
double f(double a, double b) {
        double r2287771 = a;
        double r2287772 = r2287771 * r2287771;
        double r2287773 = b;
        double r2287774 = r2287773 * r2287773;
        double r2287775 = r2287772 + r2287774;
        double r2287776 = 2.0;
        double r2287777 = pow(r2287775, r2287776);
        double r2287778 = 4.0;
        double r2287779 = 1.0;
        double r2287780 = r2287779 + r2287771;
        double r2287781 = r2287772 * r2287780;
        double r2287782 = 3.0;
        double r2287783 = r2287782 * r2287771;
        double r2287784 = r2287779 - r2287783;
        double r2287785 = r2287774 * r2287784;
        double r2287786 = r2287781 + r2287785;
        double r2287787 = r2287778 * r2287786;
        double r2287788 = r2287777 + r2287787;
        double r2287789 = r2287788 - r2287779;
        return r2287789;
}

double f(double a, double b) {
        double r2287790 = b;
        double r2287791 = r2287790 * r2287790;
        double r2287792 = 2.0;
        double r2287793 = a;
        double r2287794 = r2287793 * r2287793;
        double r2287795 = r2287791 * r2287794;
        double r2287796 = 4.0;
        double r2287797 = pow(r2287793, r2287796);
        double r2287798 = fma(r2287792, r2287795, r2287797);
        double r2287799 = fma(r2287791, r2287791, r2287798);
        double r2287800 = 1.0;
        double r2287801 = 3.0;
        double r2287802 = r2287793 * r2287801;
        double r2287803 = r2287800 - r2287802;
        double r2287804 = r2287803 * r2287791;
        double r2287805 = r2287800 + r2287793;
        double r2287806 = r2287805 * r2287794;
        double r2287807 = r2287804 + r2287806;
        double r2287808 = r2287796 * r2287807;
        double r2287809 = r2287799 + r2287808;
        double r2287810 = r2287809 - r2287800;
        return r2287810;
}

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. Taylor expanded around inf 0.0

    \[\leadsto \left(\color{blue}{\left({b}^{4} + \left({a}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right)\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\]
  3. Simplified0.2

    \[\leadsto \left(\color{blue}{\mathsf{fma}\left(b \cdot b, b \cdot b, \mathsf{fma}\left(2, \left(b \cdot b\right) \cdot \left(a \cdot a\right), \left(a \cdot a\right) \cdot \left(a \cdot a\right)\right)\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. Using strategy rm
  5. Applied pow20.2

    \[\leadsto \left(\mathsf{fma}\left(b \cdot b, b \cdot b, \mathsf{fma}\left(2, \left(b \cdot b\right) \cdot \left(a \cdot a\right), \left(a \cdot a\right) \cdot \color{blue}{{a}^{2}}\right)\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\]
  6. Applied pow20.2

    \[\leadsto \left(\mathsf{fma}\left(b \cdot b, b \cdot b, \mathsf{fma}\left(2, \left(b \cdot b\right) \cdot \left(a \cdot a\right), \color{blue}{{a}^{2}} \cdot {a}^{2}\right)\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\]
  7. Applied pow-sqr0.1

    \[\leadsto \left(\mathsf{fma}\left(b \cdot b, b \cdot b, \mathsf{fma}\left(2, \left(b \cdot b\right) \cdot \left(a \cdot a\right), \color{blue}{{a}^{\left(2 \cdot 2\right)}}\right)\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\]
  8. Simplified0.1

    \[\leadsto \left(\mathsf{fma}\left(b \cdot b, b \cdot b, \mathsf{fma}\left(2, \left(b \cdot b\right) \cdot \left(a \cdot a\right), {a}^{\color{blue}{4}}\right)\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\]
  9. Final simplification0.1

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

Reproduce

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