Average Error: 0.2 → 0.2
Time: 7.2s
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\]
\[\left(\mathsf{fma}\left({a}^{2}, \left(1 - a\right) \cdot 4, {\left(a \cdot a + b \cdot b\right)}^{2}\right) + 4 \cdot \left(\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
\left(\mathsf{fma}\left({a}^{2}, \left(1 - a\right) \cdot 4, {\left(a \cdot a + b \cdot b\right)}^{2}\right) + 4 \cdot \left(\left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1
double f(double a, double b) {
        double r306117 = a;
        double r306118 = r306117 * r306117;
        double r306119 = b;
        double r306120 = r306119 * r306119;
        double r306121 = r306118 + r306120;
        double r306122 = 2.0;
        double r306123 = pow(r306121, r306122);
        double r306124 = 4.0;
        double r306125 = 1.0;
        double r306126 = r306125 - r306117;
        double r306127 = r306118 * r306126;
        double r306128 = 3.0;
        double r306129 = r306128 + r306117;
        double r306130 = r306120 * r306129;
        double r306131 = r306127 + r306130;
        double r306132 = r306124 * r306131;
        double r306133 = r306123 + r306132;
        double r306134 = r306133 - r306125;
        return r306134;
}

double f(double a, double b) {
        double r306135 = a;
        double r306136 = 2.0;
        double r306137 = pow(r306135, r306136);
        double r306138 = 1.0;
        double r306139 = r306138 - r306135;
        double r306140 = 4.0;
        double r306141 = r306139 * r306140;
        double r306142 = r306135 * r306135;
        double r306143 = b;
        double r306144 = r306143 * r306143;
        double r306145 = r306142 + r306144;
        double r306146 = 2.0;
        double r306147 = pow(r306145, r306146);
        double r306148 = fma(r306137, r306141, r306147);
        double r306149 = 3.0;
        double r306150 = r306149 + r306135;
        double r306151 = r306144 * r306150;
        double r306152 = r306140 * r306151;
        double r306153 = r306148 + r306152;
        double r306154 = r306153 - r306138;
        return r306154;
}

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 distribute-lft-in0.2

    \[\leadsto \left({\left(a \cdot a + b \cdot b\right)}^{2} + \color{blue}{\left(4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 - a\right)\right) + 4 \cdot \left(\left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right)}\right) - 1\]
  4. Applied associate-+r+0.2

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

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

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

Reproduce

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