Average Error: 0.2 → 0.0
Time: 16.7s
Precision: 64
\[1 + \frac{4 \cdot \left(\left(x + y \cdot 0.75\right) - z\right)}{y}\]
\[\mathsf{fma}\left(0.75 + \left(\frac{x}{y} - \frac{z}{y}\right), 4, 1\right)\]
1 + \frac{4 \cdot \left(\left(x + y \cdot 0.75\right) - z\right)}{y}
\mathsf{fma}\left(0.75 + \left(\frac{x}{y} - \frac{z}{y}\right), 4, 1\right)
double f(double x, double y, double z) {
        double r166500 = 1.0;
        double r166501 = 4.0;
        double r166502 = x;
        double r166503 = y;
        double r166504 = 0.75;
        double r166505 = r166503 * r166504;
        double r166506 = r166502 + r166505;
        double r166507 = z;
        double r166508 = r166506 - r166507;
        double r166509 = r166501 * r166508;
        double r166510 = r166509 / r166503;
        double r166511 = r166500 + r166510;
        return r166511;
}

double f(double x, double y, double z) {
        double r166512 = 0.75;
        double r166513 = x;
        double r166514 = y;
        double r166515 = r166513 / r166514;
        double r166516 = z;
        double r166517 = r166516 / r166514;
        double r166518 = r166515 - r166517;
        double r166519 = r166512 + r166518;
        double r166520 = 4.0;
        double r166521 = 1.0;
        double r166522 = fma(r166519, r166520, r166521);
        return r166522;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Derivation

  1. Initial program 0.2

    \[1 + \frac{4 \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, 1\right)}\]
  3. Using strategy rm
  4. Applied div-sub0.0

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

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

Reproduce

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