Average Error: 0.2 → 0.0
Time: 26.4s
Precision: 64
\[1 + \frac{4 \cdot \left(\left(x + y \cdot 0.75\right) - z\right)}{y}\]
\[\mathsf{fma}\left(4, \frac{x}{y}, 4\right) - 4 \cdot \frac{z}{y}\]
1 + \frac{4 \cdot \left(\left(x + y \cdot 0.75\right) - z\right)}{y}
\mathsf{fma}\left(4, \frac{x}{y}, 4\right) - 4 \cdot \frac{z}{y}
double f(double x, double y, double z) {
        double r244156 = 1.0;
        double r244157 = 4.0;
        double r244158 = x;
        double r244159 = y;
        double r244160 = 0.75;
        double r244161 = r244159 * r244160;
        double r244162 = r244158 + r244161;
        double r244163 = z;
        double r244164 = r244162 - r244163;
        double r244165 = r244157 * r244164;
        double r244166 = r244165 / r244159;
        double r244167 = r244156 + r244166;
        return r244167;
}

double f(double x, double y, double z) {
        double r244168 = 4.0;
        double r244169 = x;
        double r244170 = y;
        double r244171 = r244169 / r244170;
        double r244172 = fma(r244168, r244171, r244168);
        double r244173 = z;
        double r244174 = r244173 / r244170;
        double r244175 = r244168 * r244174;
        double r244176 = r244172 - r244175;
        return r244176;
}

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(4, 0.75 - \frac{z - x}{y}, 1\right)}\]
  3. Taylor expanded around 0 0.0

    \[\leadsto \color{blue}{\left(4 \cdot \frac{x}{y} + 4\right) - 4 \cdot \frac{z}{y}}\]
  4. Simplified0.0

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

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

Reproduce

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