Average Error: 0.2 → 0.2
Time: 21.7s
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(\mathsf{fma}\left(1, {a}^{2}, 3 \cdot {b}^{2}\right) - {a}^{3}, 4, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\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(\mathsf{fma}\left(1, {a}^{2}, 3 \cdot {b}^{2}\right) - {a}^{3}, 4, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1
double f(double a, double b) {
        double r355130 = a;
        double r355131 = r355130 * r355130;
        double r355132 = b;
        double r355133 = r355132 * r355132;
        double r355134 = r355131 + r355133;
        double r355135 = 2.0;
        double r355136 = pow(r355134, r355135);
        double r355137 = 4.0;
        double r355138 = 1.0;
        double r355139 = r355138 - r355130;
        double r355140 = r355131 * r355139;
        double r355141 = 3.0;
        double r355142 = r355141 + r355130;
        double r355143 = r355133 * r355142;
        double r355144 = r355140 + r355143;
        double r355145 = r355137 * r355144;
        double r355146 = r355136 + r355145;
        double r355147 = r355146 - r355138;
        return r355147;
}

double f(double a, double b) {
        double r355148 = 1.0;
        double r355149 = a;
        double r355150 = 2.0;
        double r355151 = pow(r355149, r355150);
        double r355152 = 3.0;
        double r355153 = b;
        double r355154 = pow(r355153, r355150);
        double r355155 = r355152 * r355154;
        double r355156 = fma(r355148, r355151, r355155);
        double r355157 = 3.0;
        double r355158 = pow(r355149, r355157);
        double r355159 = r355156 - r355158;
        double r355160 = 4.0;
        double r355161 = r355153 * r355153;
        double r355162 = fma(r355149, r355149, r355161);
        double r355163 = 2.0;
        double r355164 = pow(r355162, r355163);
        double r355165 = fma(r355159, r355160, r355164);
        double r355166 = r355165 - r355148;
        return r355166;
}

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. Simplified0.2

    \[\leadsto \color{blue}{\mathsf{fma}\left(\mathsf{fma}\left(a \cdot a, 1 - a, \left(b \cdot b\right) \cdot \left(3 + a\right)\right), 4, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1}\]
  3. Taylor expanded around 0 0.2

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

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

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

Reproduce

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