Average Error: 0.2 → 0.2
Time: 5.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(\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(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(\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(1 - 3 \cdot a\right)\right)\right) - 1
double f(double a, double b) {
        double r153857 = a;
        double r153858 = r153857 * r153857;
        double r153859 = b;
        double r153860 = r153859 * r153859;
        double r153861 = r153858 + r153860;
        double r153862 = 2.0;
        double r153863 = pow(r153861, r153862);
        double r153864 = 4.0;
        double r153865 = 1.0;
        double r153866 = r153865 + r153857;
        double r153867 = r153858 * r153866;
        double r153868 = 3.0;
        double r153869 = r153868 * r153857;
        double r153870 = r153865 - r153869;
        double r153871 = r153860 * r153870;
        double r153872 = r153867 + r153871;
        double r153873 = r153864 * r153872;
        double r153874 = r153863 + r153873;
        double r153875 = r153874 - r153865;
        return r153875;
}

double f(double a, double b) {
        double r153876 = a;
        double r153877 = r153876 * r153876;
        double r153878 = b;
        double r153879 = r153878 * r153878;
        double r153880 = r153877 + r153879;
        double r153881 = 2.0;
        double r153882 = pow(r153880, r153881);
        double r153883 = sqrt(r153882);
        double r153884 = 4.0;
        double r153885 = 1.0;
        double r153886 = r153885 + r153876;
        double r153887 = r153877 * r153886;
        double r153888 = 3.0;
        double r153889 = r153888 * r153876;
        double r153890 = r153885 - r153889;
        double r153891 = r153879 * r153890;
        double r153892 = r153887 + r153891;
        double r153893 = r153884 * r153892;
        double r153894 = fma(r153883, r153883, r153893);
        double r153895 = r153894 - r153885;
        return r153895;
}

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

Reproduce

herbie shell --seed 2020060 +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))