Average Error: 0.2 → 0.2
Time: 25.9s
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(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\]
\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(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
double f(double a, double b) {
        double r206147 = a;
        double r206148 = r206147 * r206147;
        double r206149 = b;
        double r206150 = r206149 * r206149;
        double r206151 = r206148 + r206150;
        double r206152 = 2.0;
        double r206153 = pow(r206151, r206152);
        double r206154 = 4.0;
        double r206155 = 1.0;
        double r206156 = r206155 - r206147;
        double r206157 = r206148 * r206156;
        double r206158 = 3.0;
        double r206159 = r206158 + r206147;
        double r206160 = r206150 * r206159;
        double r206161 = r206157 + r206160;
        double r206162 = r206154 * r206161;
        double r206163 = r206153 + r206162;
        double r206164 = r206163 - r206155;
        return r206164;
}

double f(double a, double b) {
        double r206165 = a;
        double r206166 = r206165 * r206165;
        double r206167 = 1.0;
        double r206168 = r206167 - r206165;
        double r206169 = b;
        double r206170 = r206169 * r206169;
        double r206171 = 3.0;
        double r206172 = r206171 + r206165;
        double r206173 = r206170 * r206172;
        double r206174 = fma(r206166, r206168, r206173);
        double r206175 = 4.0;
        double r206176 = fma(r206165, r206165, r206170);
        double r206177 = 2.0;
        double r206178 = pow(r206176, r206177);
        double r206179 = fma(r206174, r206175, r206178);
        double r206180 = r206179 - r206167;
        return r206180;
}

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. Final simplification0.2

    \[\leadsto \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\]

Reproduce

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