Average Error: 0.2 → 0.2
Time: 14.2s
Precision: binary64
Cost: 6848
\[1 + \frac{4 \cdot \left(\left(x + y \cdot 0.75\right) - z\right)}{y} \]
\[\mathsf{fma}\left(\frac{4}{y}, x - z, 4\right) \]
(FPCore (x y z)
 :precision binary64
 (+ 1.0 (/ (* 4.0 (- (+ x (* y 0.75)) z)) y)))
(FPCore (x y z) :precision binary64 (fma (/ 4.0 y) (- x z) 4.0))
double code(double x, double y, double z) {
	return 1.0 + ((4.0 * ((x + (y * 0.75)) - z)) / y);
}
double code(double x, double y, double z) {
	return fma((4.0 / y), (x - z), 4.0);
}
function code(x, y, z)
	return Float64(1.0 + Float64(Float64(4.0 * Float64(Float64(x + Float64(y * 0.75)) - z)) / y))
end
function code(x, y, z)
	return fma(Float64(4.0 / y), Float64(x - z), 4.0)
end
code[x_, y_, z_] := N[(1.0 + N[(N[(4.0 * N[(N[(x + N[(y * 0.75), $MachinePrecision]), $MachinePrecision] - z), $MachinePrecision]), $MachinePrecision] / y), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_] := N[(N[(4.0 / y), $MachinePrecision] * N[(x - z), $MachinePrecision] + 4.0), $MachinePrecision]
1 + \frac{4 \cdot \left(\left(x + y \cdot 0.75\right) - z\right)}{y}
\mathsf{fma}\left(\frac{4}{y}, x - z, 4\right)

Error

Derivation

  1. Initial program 0.2

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

    \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{4}{y}, x - z, 4\right)} \]
    Proof
    (fma.f64 (/.f64 4 y) (-.f64 x z) 4): 0 points increase in error, 0 points decrease in error
    (fma.f64 (/.f64 4 y) (Rewrite<= unsub-neg_binary64 (+.f64 x (neg.f64 z))) 4): 0 points increase in error, 0 points decrease in error
    (Rewrite=> fma-udef_binary64 (+.f64 (*.f64 (/.f64 4 y) (+.f64 x (neg.f64 z))) 4)): 1 points increase in error, 0 points decrease in error
    (+.f64 (Rewrite<= *-commutative_binary64 (*.f64 (+.f64 x (neg.f64 z)) (/.f64 4 y))) 4): 0 points increase in error, 0 points decrease in error
    (Rewrite<= +-commutative_binary64 (+.f64 4 (*.f64 (+.f64 x (neg.f64 z)) (/.f64 4 y)))): 0 points increase in error, 0 points decrease in error
    (+.f64 (Rewrite<= metadata-eval (+.f64 3 1)) (*.f64 (+.f64 x (neg.f64 z)) (/.f64 4 y))): 0 points increase in error, 0 points decrease in error
    (+.f64 (+.f64 (Rewrite<= metadata-eval (*.f64 4 3/4)) 1) (*.f64 (+.f64 x (neg.f64 z)) (/.f64 4 y))): 0 points increase in error, 0 points decrease in error
    (+.f64 (+.f64 (*.f64 (Rewrite<= metadata-eval (/.f64 4 1)) 3/4) 1) (*.f64 (+.f64 x (neg.f64 z)) (/.f64 4 y))): 0 points increase in error, 0 points decrease in error
    (+.f64 (+.f64 (*.f64 (/.f64 4 (Rewrite<= *-inverses_binary64 (/.f64 y y))) 3/4) 1) (*.f64 (+.f64 x (neg.f64 z)) (/.f64 4 y))): 0 points increase in error, 0 points decrease in error
    (+.f64 (+.f64 (*.f64 (Rewrite<= associate-/l*_binary64 (/.f64 (*.f64 4 y) y)) 3/4) 1) (*.f64 (+.f64 x (neg.f64 z)) (/.f64 4 y))): 2 points increase in error, 0 points decrease in error
    (+.f64 (+.f64 (*.f64 (Rewrite<= associate-*l/_binary64 (*.f64 (/.f64 4 y) y)) 3/4) 1) (*.f64 (+.f64 x (neg.f64 z)) (/.f64 4 y))): 13 points increase in error, 2 points decrease in error
    (+.f64 (+.f64 (Rewrite<= associate-*r*_binary64 (*.f64 (/.f64 4 y) (*.f64 y 3/4))) 1) (*.f64 (+.f64 x (neg.f64 z)) (/.f64 4 y))): 5 points increase in error, 7 points decrease in error
    (+.f64 (Rewrite<= +-commutative_binary64 (+.f64 1 (*.f64 (/.f64 4 y) (*.f64 y 3/4)))) (*.f64 (+.f64 x (neg.f64 z)) (/.f64 4 y))): 0 points increase in error, 0 points decrease in error
    (+.f64 (+.f64 1 (*.f64 (/.f64 4 y) (*.f64 y 3/4))) (Rewrite=> *-commutative_binary64 (*.f64 (/.f64 4 y) (+.f64 x (neg.f64 z))))): 0 points increase in error, 0 points decrease in error
    (Rewrite<= associate-+r+_binary64 (+.f64 1 (+.f64 (*.f64 (/.f64 4 y) (*.f64 y 3/4)) (*.f64 (/.f64 4 y) (+.f64 x (neg.f64 z)))))): 2 points increase in error, 0 points decrease in error
    (+.f64 1 (Rewrite<= distribute-lft-in_binary64 (*.f64 (/.f64 4 y) (+.f64 (*.f64 y 3/4) (+.f64 x (neg.f64 z)))))): 4 points increase in error, 3 points decrease in error
    (+.f64 1 (*.f64 (/.f64 4 y) (Rewrite<= associate-+l+_binary64 (+.f64 (+.f64 (*.f64 y 3/4) x) (neg.f64 z))))): 0 points increase in error, 0 points decrease in error
    (+.f64 1 (*.f64 (/.f64 4 y) (+.f64 (Rewrite<= +-commutative_binary64 (+.f64 x (*.f64 y 3/4))) (neg.f64 z)))): 0 points increase in error, 0 points decrease in error
    (+.f64 1 (*.f64 (/.f64 4 y) (Rewrite<= sub-neg_binary64 (-.f64 (+.f64 x (*.f64 y 3/4)) z)))): 0 points increase in error, 0 points decrease in error
    (+.f64 1 (Rewrite=> associate-*l/_binary64 (/.f64 (*.f64 4 (-.f64 (+.f64 x (*.f64 y 3/4)) z)) y))): 7 points increase in error, 54 points decrease in error
  3. Final simplification0.2

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

Alternatives

Alternative 1
Error30.1
Cost1244
\[\begin{array}{l} t_0 := \frac{4}{\frac{y}{x}}\\ t_1 := \frac{-4}{\frac{y}{z}}\\ \mathbf{if}\;y \leq -1.565292867528616 \cdot 10^{+60}:\\ \;\;\;\;4\\ \mathbf{elif}\;y \leq -1.1 \cdot 10^{-60}:\\ \;\;\;\;t_1\\ \mathbf{elif}\;y \leq -1.8 \cdot 10^{-164}:\\ \;\;\;\;t_0\\ \mathbf{elif}\;y \leq -1.12 \cdot 10^{-206}:\\ \;\;\;\;t_1\\ \mathbf{elif}\;y \leq 2 \cdot 10^{-192}:\\ \;\;\;\;\frac{4}{y} \cdot x\\ \mathbf{elif}\;y \leq 1.18 \cdot 10^{-125}:\\ \;\;\;\;t_1\\ \mathbf{elif}\;y \leq 1.835808416170997 \cdot 10^{+42}:\\ \;\;\;\;t_0\\ \mathbf{else}:\\ \;\;\;\;4\\ \end{array} \]
Alternative 2
Error30.0
Cost1244
\[\begin{array}{l} t_0 := \frac{4}{\frac{y}{x}}\\ t_1 := -4 \cdot \frac{z}{y}\\ \mathbf{if}\;y \leq -1.565292867528616 \cdot 10^{+60}:\\ \;\;\;\;4\\ \mathbf{elif}\;y \leq -1.1 \cdot 10^{-60}:\\ \;\;\;\;t_1\\ \mathbf{elif}\;y \leq -1.8 \cdot 10^{-164}:\\ \;\;\;\;t_0\\ \mathbf{elif}\;y \leq -1.12 \cdot 10^{-206}:\\ \;\;\;\;t_1\\ \mathbf{elif}\;y \leq 2 \cdot 10^{-192}:\\ \;\;\;\;\frac{4}{y} \cdot x\\ \mathbf{elif}\;y \leq 1.18 \cdot 10^{-125}:\\ \;\;\;\;t_1\\ \mathbf{elif}\;y \leq 1.835808416170997 \cdot 10^{+42}:\\ \;\;\;\;t_0\\ \mathbf{else}:\\ \;\;\;\;4\\ \end{array} \]
Alternative 3
Error30.0
Cost1244
\[\begin{array}{l} t_0 := \frac{4 \cdot x}{y}\\ t_1 := -4 \cdot \frac{z}{y}\\ \mathbf{if}\;y \leq -1.565292867528616 \cdot 10^{+60}:\\ \;\;\;\;4\\ \mathbf{elif}\;y \leq -1.1 \cdot 10^{-60}:\\ \;\;\;\;t_1\\ \mathbf{elif}\;y \leq -1.8 \cdot 10^{-164}:\\ \;\;\;\;t_0\\ \mathbf{elif}\;y \leq -1.12 \cdot 10^{-206}:\\ \;\;\;\;t_1\\ \mathbf{elif}\;y \leq 2 \cdot 10^{-192}:\\ \;\;\;\;t_0\\ \mathbf{elif}\;y \leq 1.18 \cdot 10^{-125}:\\ \;\;\;\;t_1\\ \mathbf{elif}\;y \leq 1.835808416170997 \cdot 10^{+42}:\\ \;\;\;\;t_0\\ \mathbf{else}:\\ \;\;\;\;4\\ \end{array} \]
Alternative 4
Error13.5
Cost1240
\[\begin{array}{l} t_0 := 4 + \frac{4 \cdot x}{y}\\ t_1 := \frac{4}{y} \cdot \left(x - z\right)\\ \mathbf{if}\;y \leq -2.908208845069327 \cdot 10^{+132}:\\ \;\;\;\;t_0\\ \mathbf{elif}\;y \leq -8.428995971934162 \cdot 10^{+90}:\\ \;\;\;\;t_1\\ \mathbf{elif}\;y \leq -1.565292867528616 \cdot 10^{+60}:\\ \;\;\;\;t_0\\ \mathbf{elif}\;y \leq -9 \cdot 10^{-80}:\\ \;\;\;\;t_1\\ \mathbf{elif}\;y \leq -6.5 \cdot 10^{-165}:\\ \;\;\;\;t_0\\ \mathbf{elif}\;y \leq 6.248570128496144 \cdot 10^{+34}:\\ \;\;\;\;t_1\\ \mathbf{else}:\\ \;\;\;\;t_0\\ \end{array} \]
Alternative 5
Error13.3
Cost1108
\[\begin{array}{l} t_0 := 4 + -4 \cdot \frac{z}{y}\\ t_1 := 4 + \frac{4 \cdot x}{y}\\ t_2 := \frac{4}{y} \cdot \left(x - z\right)\\ \mathbf{if}\;y \leq -1.911838355223436 \cdot 10^{+102}:\\ \;\;\;\;t_1\\ \mathbf{elif}\;y \leq -1.7777300221429666 \cdot 10^{-13}:\\ \;\;\;\;t_0\\ \mathbf{elif}\;y \leq -9 \cdot 10^{-80}:\\ \;\;\;\;t_2\\ \mathbf{elif}\;y \leq -6.5 \cdot 10^{-165}:\\ \;\;\;\;t_1\\ \mathbf{elif}\;y \leq 1.835808416170997 \cdot 10^{+42}:\\ \;\;\;\;t_2\\ \mathbf{else}:\\ \;\;\;\;t_0\\ \end{array} \]
Alternative 6
Error12.8
Cost1108
\[\begin{array}{l} t_0 := 4 + -4 \cdot \frac{z}{y}\\ t_1 := 4 + \frac{4 \cdot x}{y}\\ t_2 := 4 \cdot \frac{x - z}{y}\\ \mathbf{if}\;y \leq -1.911838355223436 \cdot 10^{+102}:\\ \;\;\;\;t_1\\ \mathbf{elif}\;y \leq -1.7777300221429666 \cdot 10^{-13}:\\ \;\;\;\;t_0\\ \mathbf{elif}\;y \leq -9 \cdot 10^{-80}:\\ \;\;\;\;t_2\\ \mathbf{elif}\;y \leq -7.6 \cdot 10^{-138}:\\ \;\;\;\;t_1\\ \mathbf{elif}\;y \leq 1.835808416170997 \cdot 10^{+42}:\\ \;\;\;\;t_2\\ \mathbf{else}:\\ \;\;\;\;t_0\\ \end{array} \]
Alternative 7
Error17.2
Cost712
\[\begin{array}{l} \mathbf{if}\;y \leq -9.734012787431517 \cdot 10^{+140}:\\ \;\;\;\;4\\ \mathbf{elif}\;y \leq 1.1096875832682885 \cdot 10^{+48}:\\ \;\;\;\;\frac{4}{y} \cdot \left(x - z\right)\\ \mathbf{else}:\\ \;\;\;\;4\\ \end{array} \]
Alternative 8
Error30.1
Cost584
\[\begin{array}{l} \mathbf{if}\;y \leq -1.7777300221429666 \cdot 10^{-13}:\\ \;\;\;\;4\\ \mathbf{elif}\;y \leq 1.835808416170997 \cdot 10^{+42}:\\ \;\;\;\;\frac{4}{\frac{y}{x}}\\ \mathbf{else}:\\ \;\;\;\;4\\ \end{array} \]
Alternative 9
Error0.2
Cost576
\[4 + \frac{4}{y} \cdot \left(x - z\right) \]
Alternative 10
Error36.5
Cost64
\[4 \]

Error

Reproduce

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