Average Error: 0.2 → 0.2
Time: 6.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(3 + 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(3 + 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(3 + 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(3 + a\right)\right)\right) - 1
double f(double a, double b) {
        double r370847 = a;
        double r370848 = r370847 * r370847;
        double r370849 = b;
        double r370850 = r370849 * r370849;
        double r370851 = r370848 + r370850;
        double r370852 = 2.0;
        double r370853 = pow(r370851, r370852);
        double r370854 = 4.0;
        double r370855 = 1.0;
        double r370856 = r370855 - r370847;
        double r370857 = r370848 * r370856;
        double r370858 = 3.0;
        double r370859 = r370858 + r370847;
        double r370860 = r370850 * r370859;
        double r370861 = r370857 + r370860;
        double r370862 = r370854 * r370861;
        double r370863 = r370853 + r370862;
        double r370864 = r370863 - r370855;
        return r370864;
}

double f(double a, double b) {
        double r370865 = a;
        double r370866 = r370865 * r370865;
        double r370867 = b;
        double r370868 = r370867 * r370867;
        double r370869 = r370866 + r370868;
        double r370870 = 2.0;
        double r370871 = pow(r370869, r370870);
        double r370872 = sqrt(r370871);
        double r370873 = 4.0;
        double r370874 = 1.0;
        double r370875 = r370874 - r370865;
        double r370876 = r370866 * r370875;
        double r370877 = 3.0;
        double r370878 = r370877 + r370865;
        double r370879 = r370868 * r370878;
        double r370880 = r370876 + r370879;
        double r370881 = r370873 * r370880;
        double r370882 = fma(r370872, r370872, r370881);
        double r370883 = r370882 - r370874;
        return r370883;
}

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 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(3 + 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(3 + 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(3 + a\right)\right)\right) - 1\]

Reproduce

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