Average Error: 0.2 → 0.0
Time: 10.2s
Precision: 64
\[1.0 + \frac{4.0 \cdot \left(\left(x + y \cdot 0.75\right) - z\right)}{y}\]
\[\mathsf{fma}\left(\frac{x - z}{y} + 0.75, 4.0, 1.0\right)\]
1.0 + \frac{4.0 \cdot \left(\left(x + y \cdot 0.75\right) - z\right)}{y}
\mathsf{fma}\left(\frac{x - z}{y} + 0.75, 4.0, 1.0\right)
double f(double x, double y, double z) {
        double r14072631 = 1.0;
        double r14072632 = 4.0;
        double r14072633 = x;
        double r14072634 = y;
        double r14072635 = 0.75;
        double r14072636 = r14072634 * r14072635;
        double r14072637 = r14072633 + r14072636;
        double r14072638 = z;
        double r14072639 = r14072637 - r14072638;
        double r14072640 = r14072632 * r14072639;
        double r14072641 = r14072640 / r14072634;
        double r14072642 = r14072631 + r14072641;
        return r14072642;
}

double f(double x, double y, double z) {
        double r14072643 = x;
        double r14072644 = z;
        double r14072645 = r14072643 - r14072644;
        double r14072646 = y;
        double r14072647 = r14072645 / r14072646;
        double r14072648 = 0.75;
        double r14072649 = r14072647 + r14072648;
        double r14072650 = 4.0;
        double r14072651 = 1.0;
        double r14072652 = fma(r14072649, r14072650, r14072651);
        return r14072652;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Derivation

  1. Initial program 0.2

    \[1.0 + \frac{4.0 \cdot \left(\left(x + y \cdot 0.75\right) - z\right)}{y}\]
  2. Simplified0.0

    \[\leadsto \color{blue}{\mathsf{fma}\left(0.75 + \frac{x - z}{y}, 4.0, 1.0\right)}\]
  3. Final simplification0.0

    \[\leadsto \mathsf{fma}\left(\frac{x - z}{y} + 0.75, 4.0, 1.0\right)\]

Reproduce

herbie shell --seed 2019163 +o rules:numerics
(FPCore (x y z)
  :name "Data.Array.Repa.Algorithms.ColorRamp:rampColorHotToCold from repa-algorithms-3.4.0.1, A"
  (+ 1.0 (/ (* 4.0 (- (+ x (* y 0.75)) z)) y)))