Average Error: 0.1 → 0.1
Time: 19.9s
Precision: 64
\[\frac{1.0}{2.0} \cdot \left(x + y \cdot \sqrt{z}\right)\]
\[\frac{\mathsf{fma}\left(y, \sqrt{z}, x\right) \cdot 1.0}{2.0}\]
\frac{1.0}{2.0} \cdot \left(x + y \cdot \sqrt{z}\right)
\frac{\mathsf{fma}\left(y, \sqrt{z}, x\right) \cdot 1.0}{2.0}
double f(double x, double y, double z) {
        double r7850402 = 1.0;
        double r7850403 = 2.0;
        double r7850404 = r7850402 / r7850403;
        double r7850405 = x;
        double r7850406 = y;
        double r7850407 = z;
        double r7850408 = sqrt(r7850407);
        double r7850409 = r7850406 * r7850408;
        double r7850410 = r7850405 + r7850409;
        double r7850411 = r7850404 * r7850410;
        return r7850411;
}

double f(double x, double y, double z) {
        double r7850412 = y;
        double r7850413 = z;
        double r7850414 = sqrt(r7850413);
        double r7850415 = x;
        double r7850416 = fma(r7850412, r7850414, r7850415);
        double r7850417 = 1.0;
        double r7850418 = r7850416 * r7850417;
        double r7850419 = 2.0;
        double r7850420 = r7850418 / r7850419;
        return r7850420;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Derivation

  1. Initial program 0.1

    \[\frac{1.0}{2.0} \cdot \left(x + y \cdot \sqrt{z}\right)\]
  2. Simplified0.1

    \[\leadsto \color{blue}{\frac{1.0 \cdot \mathsf{fma}\left(y, \sqrt{z}, x\right)}{2.0}}\]
  3. Final simplification0.1

    \[\leadsto \frac{\mathsf{fma}\left(y, \sqrt{z}, x\right) \cdot 1.0}{2.0}\]

Reproduce

herbie shell --seed 2019168 +o rules:numerics
(FPCore (x y z)
  :name "Diagrams.Solve.Polynomial:quadForm from diagrams-solve-0.1, B"
  (* (/ 1.0 2.0) (+ x (* y (sqrt z)))))