Average Error: 0.2 → 0.0
Time: 12.8s
Precision: 64
\[1 + \frac{4 \cdot \left(\left(x + y \cdot 0.75\right) - z\right)}{y}\]
\[\mathsf{fma}\left(\frac{x - z}{y} + 0.75, 4, 1\right)\]
1 + \frac{4 \cdot \left(\left(x + y \cdot 0.75\right) - z\right)}{y}
\mathsf{fma}\left(\frac{x - z}{y} + 0.75, 4, 1\right)
double f(double x, double y, double z) {
        double r9320445 = 1.0;
        double r9320446 = 4.0;
        double r9320447 = x;
        double r9320448 = y;
        double r9320449 = 0.75;
        double r9320450 = r9320448 * r9320449;
        double r9320451 = r9320447 + r9320450;
        double r9320452 = z;
        double r9320453 = r9320451 - r9320452;
        double r9320454 = r9320446 * r9320453;
        double r9320455 = r9320454 / r9320448;
        double r9320456 = r9320445 + r9320455;
        return r9320456;
}

double f(double x, double y, double z) {
        double r9320457 = x;
        double r9320458 = z;
        double r9320459 = r9320457 - r9320458;
        double r9320460 = y;
        double r9320461 = r9320459 / r9320460;
        double r9320462 = 0.75;
        double r9320463 = r9320461 + r9320462;
        double r9320464 = 4.0;
        double r9320465 = 1.0;
        double r9320466 = fma(r9320463, r9320464, r9320465);
        return r9320466;
}

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

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

Reproduce

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