Average Error: 0.2 → 0.2
Time: 27.5s
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(\left(a \cdot a + b \cdot b\right), \left(a \cdot a + b \cdot b\right), \left(4 \cdot \left(\left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right) + \left(a \cdot a\right) \cdot \left(a + 1\right)\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(\left(a \cdot a + b \cdot b\right), \left(a \cdot a + b \cdot b\right), \left(4 \cdot \left(\left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right) + \left(a \cdot a\right) \cdot \left(a + 1\right)\right)\right)\right) - 1
double f(double a, double b) {
        double r3593128 = a;
        double r3593129 = r3593128 * r3593128;
        double r3593130 = b;
        double r3593131 = r3593130 * r3593130;
        double r3593132 = r3593129 + r3593131;
        double r3593133 = 2.0;
        double r3593134 = pow(r3593132, r3593133);
        double r3593135 = 4.0;
        double r3593136 = 1.0;
        double r3593137 = r3593136 + r3593128;
        double r3593138 = r3593129 * r3593137;
        double r3593139 = 3.0;
        double r3593140 = r3593139 * r3593128;
        double r3593141 = r3593136 - r3593140;
        double r3593142 = r3593131 * r3593141;
        double r3593143 = r3593138 + r3593142;
        double r3593144 = r3593135 * r3593143;
        double r3593145 = r3593134 + r3593144;
        double r3593146 = r3593145 - r3593136;
        return r3593146;
}

double f(double a, double b) {
        double r3593147 = a;
        double r3593148 = r3593147 * r3593147;
        double r3593149 = b;
        double r3593150 = r3593149 * r3593149;
        double r3593151 = r3593148 + r3593150;
        double r3593152 = 4.0;
        double r3593153 = 1.0;
        double r3593154 = 3.0;
        double r3593155 = r3593154 * r3593147;
        double r3593156 = r3593153 - r3593155;
        double r3593157 = r3593150 * r3593156;
        double r3593158 = r3593147 + r3593153;
        double r3593159 = r3593148 * r3593158;
        double r3593160 = r3593157 + r3593159;
        double r3593161 = r3593152 * r3593160;
        double r3593162 = fma(r3593151, r3593151, r3593161);
        double r3593163 = r3593162 - r3593153;
        return r3593163;
}

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

    \[\leadsto \left(\color{blue}{\left(a \cdot a + b \cdot b\right) \cdot \left(a \cdot a + b \cdot b\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. Applied fma-def0.2

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

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

Reproduce

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