
(FPCore (x y z) :precision binary64 (+ 1.0 (/ (* 4.0 (- (+ x (* y 0.75)) z)) y)))
double code(double x, double y, double z) {
return 1.0 + ((4.0 * ((x + (y * 0.75)) - z)) / y);
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = 1.0d0 + ((4.0d0 * ((x + (y * 0.75d0)) - z)) / y)
end function
public static double code(double x, double y, double z) {
return 1.0 + ((4.0 * ((x + (y * 0.75)) - z)) / y);
}
def code(x, y, z): return 1.0 + ((4.0 * ((x + (y * 0.75)) - z)) / y)
function code(x, y, z) return Float64(1.0 + Float64(Float64(4.0 * Float64(Float64(x + Float64(y * 0.75)) - z)) / y)) end
function tmp = code(x, y, z) tmp = 1.0 + ((4.0 * ((x + (y * 0.75)) - z)) / y); 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]
\begin{array}{l}
\\
1 + \frac{4 \cdot \left(\left(x + y \cdot 0.75\right) - z\right)}{y}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 8 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x y z) :precision binary64 (+ 1.0 (/ (* 4.0 (- (+ x (* y 0.75)) z)) y)))
double code(double x, double y, double z) {
return 1.0 + ((4.0 * ((x + (y * 0.75)) - z)) / y);
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = 1.0d0 + ((4.0d0 * ((x + (y * 0.75d0)) - z)) / y)
end function
public static double code(double x, double y, double z) {
return 1.0 + ((4.0 * ((x + (y * 0.75)) - z)) / y);
}
def code(x, y, z): return 1.0 + ((4.0 * ((x + (y * 0.75)) - z)) / y)
function code(x, y, z) return Float64(1.0 + Float64(Float64(4.0 * Float64(Float64(x + Float64(y * 0.75)) - z)) / y)) end
function tmp = code(x, y, z) tmp = 1.0 + ((4.0 * ((x + (y * 0.75)) - z)) / y); 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]
\begin{array}{l}
\\
1 + \frac{4 \cdot \left(\left(x + y \cdot 0.75\right) - z\right)}{y}
\end{array}
(FPCore (x y z) :precision binary64 (+ 4.0 (* 4.0 (/ (- x z) y))))
double code(double x, double y, double z) {
return 4.0 + (4.0 * ((x - z) / y));
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = 4.0d0 + (4.0d0 * ((x - z) / y))
end function
public static double code(double x, double y, double z) {
return 4.0 + (4.0 * ((x - z) / y));
}
def code(x, y, z): return 4.0 + (4.0 * ((x - z) / y))
function code(x, y, z) return Float64(4.0 + Float64(4.0 * Float64(Float64(x - z) / y))) end
function tmp = code(x, y, z) tmp = 4.0 + (4.0 * ((x - z) / y)); end
code[x_, y_, z_] := N[(4.0 + N[(4.0 * N[(N[(x - z), $MachinePrecision] / y), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
4 + 4 \cdot \frac{x - z}{y}
\end{array}
Initial program 99.6%
associate-*l/99.7%
+-commutative99.7%
fma-def99.7%
Simplified99.7%
Taylor expanded in y around 0 100.0%
Final simplification100.0%
(FPCore (x y z)
:precision binary64
(let* ((t_0 (* 4.0 (/ x y))) (t_1 (* -4.0 (/ z y))))
(if (<= x -2.65e+31)
t_0
(if (<= x -3.3e-43)
t_1
(if (<= x -8e-246)
4.0
(if (<= x 1.1e-302)
t_1
(if (<= x 1.5e-146) 4.0 (if (<= x 4.9e+68) t_1 t_0))))))))
double code(double x, double y, double z) {
double t_0 = 4.0 * (x / y);
double t_1 = -4.0 * (z / y);
double tmp;
if (x <= -2.65e+31) {
tmp = t_0;
} else if (x <= -3.3e-43) {
tmp = t_1;
} else if (x <= -8e-246) {
tmp = 4.0;
} else if (x <= 1.1e-302) {
tmp = t_1;
} else if (x <= 1.5e-146) {
tmp = 4.0;
} else if (x <= 4.9e+68) {
tmp = t_1;
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = 4.0d0 * (x / y)
t_1 = (-4.0d0) * (z / y)
if (x <= (-2.65d+31)) then
tmp = t_0
else if (x <= (-3.3d-43)) then
tmp = t_1
else if (x <= (-8d-246)) then
tmp = 4.0d0
else if (x <= 1.1d-302) then
tmp = t_1
else if (x <= 1.5d-146) then
tmp = 4.0d0
else if (x <= 4.9d+68) then
tmp = t_1
else
tmp = t_0
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double t_0 = 4.0 * (x / y);
double t_1 = -4.0 * (z / y);
double tmp;
if (x <= -2.65e+31) {
tmp = t_0;
} else if (x <= -3.3e-43) {
tmp = t_1;
} else if (x <= -8e-246) {
tmp = 4.0;
} else if (x <= 1.1e-302) {
tmp = t_1;
} else if (x <= 1.5e-146) {
tmp = 4.0;
} else if (x <= 4.9e+68) {
tmp = t_1;
} else {
tmp = t_0;
}
return tmp;
}
def code(x, y, z): t_0 = 4.0 * (x / y) t_1 = -4.0 * (z / y) tmp = 0 if x <= -2.65e+31: tmp = t_0 elif x <= -3.3e-43: tmp = t_1 elif x <= -8e-246: tmp = 4.0 elif x <= 1.1e-302: tmp = t_1 elif x <= 1.5e-146: tmp = 4.0 elif x <= 4.9e+68: tmp = t_1 else: tmp = t_0 return tmp
function code(x, y, z) t_0 = Float64(4.0 * Float64(x / y)) t_1 = Float64(-4.0 * Float64(z / y)) tmp = 0.0 if (x <= -2.65e+31) tmp = t_0; elseif (x <= -3.3e-43) tmp = t_1; elseif (x <= -8e-246) tmp = 4.0; elseif (x <= 1.1e-302) tmp = t_1; elseif (x <= 1.5e-146) tmp = 4.0; elseif (x <= 4.9e+68) tmp = t_1; else tmp = t_0; end return tmp end
function tmp_2 = code(x, y, z) t_0 = 4.0 * (x / y); t_1 = -4.0 * (z / y); tmp = 0.0; if (x <= -2.65e+31) tmp = t_0; elseif (x <= -3.3e-43) tmp = t_1; elseif (x <= -8e-246) tmp = 4.0; elseif (x <= 1.1e-302) tmp = t_1; elseif (x <= 1.5e-146) tmp = 4.0; elseif (x <= 4.9e+68) tmp = t_1; else tmp = t_0; end tmp_2 = tmp; end
code[x_, y_, z_] := Block[{t$95$0 = N[(4.0 * N[(x / y), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(-4.0 * N[(z / y), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[x, -2.65e+31], t$95$0, If[LessEqual[x, -3.3e-43], t$95$1, If[LessEqual[x, -8e-246], 4.0, If[LessEqual[x, 1.1e-302], t$95$1, If[LessEqual[x, 1.5e-146], 4.0, If[LessEqual[x, 4.9e+68], t$95$1, t$95$0]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 4 \cdot \frac{x}{y}\\
t_1 := -4 \cdot \frac{z}{y}\\
\mathbf{if}\;x \leq -2.65 \cdot 10^{+31}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;x \leq -3.3 \cdot 10^{-43}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;x \leq -8 \cdot 10^{-246}:\\
\;\;\;\;4\\
\mathbf{elif}\;x \leq 1.1 \cdot 10^{-302}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;x \leq 1.5 \cdot 10^{-146}:\\
\;\;\;\;4\\
\mathbf{elif}\;x \leq 4.9 \cdot 10^{+68}:\\
\;\;\;\;t_1\\
\mathbf{else}:\\
\;\;\;\;t_0\\
\end{array}
\end{array}
if x < -2.6500000000000002e31 or 4.89999999999999978e68 < x Initial program 99.1%
associate-*l/99.8%
+-commutative99.8%
fma-def99.7%
Simplified99.7%
Taylor expanded in x around inf 73.1%
Taylor expanded in x around inf 70.5%
if -2.6500000000000002e31 < x < -3.30000000000000016e-43 or -7.99999999999999965e-246 < x < 1.10000000000000004e-302 or 1.50000000000000009e-146 < x < 4.89999999999999978e68Initial program 100.0%
associate-*l/99.6%
+-commutative99.6%
fma-def99.6%
Simplified99.6%
Taylor expanded in y around 0 100.0%
Taylor expanded in x around 0 91.8%
Taylor expanded in z around inf 59.6%
if -3.30000000000000016e-43 < x < -7.99999999999999965e-246 or 1.10000000000000004e-302 < x < 1.50000000000000009e-146Initial program 99.9%
associate-*l/99.8%
+-commutative99.8%
fma-def99.7%
Simplified99.7%
Taylor expanded in y around inf 60.7%
Final simplification64.7%
(FPCore (x y z) :precision binary64 (if (or (<= x -2.9e+30) (not (<= x 1200000000000.0))) (* 4.0 (/ (- x z) y)) (+ 4.0 (* -4.0 (/ z y)))))
double code(double x, double y, double z) {
double tmp;
if ((x <= -2.9e+30) || !(x <= 1200000000000.0)) {
tmp = 4.0 * ((x - z) / y);
} else {
tmp = 4.0 + (-4.0 * (z / y));
}
return tmp;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8) :: tmp
if ((x <= (-2.9d+30)) .or. (.not. (x <= 1200000000000.0d0))) then
tmp = 4.0d0 * ((x - z) / y)
else
tmp = 4.0d0 + ((-4.0d0) * (z / y))
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double tmp;
if ((x <= -2.9e+30) || !(x <= 1200000000000.0)) {
tmp = 4.0 * ((x - z) / y);
} else {
tmp = 4.0 + (-4.0 * (z / y));
}
return tmp;
}
def code(x, y, z): tmp = 0 if (x <= -2.9e+30) or not (x <= 1200000000000.0): tmp = 4.0 * ((x - z) / y) else: tmp = 4.0 + (-4.0 * (z / y)) return tmp
function code(x, y, z) tmp = 0.0 if ((x <= -2.9e+30) || !(x <= 1200000000000.0)) tmp = Float64(4.0 * Float64(Float64(x - z) / y)); else tmp = Float64(4.0 + Float64(-4.0 * Float64(z / y))); end return tmp end
function tmp_2 = code(x, y, z) tmp = 0.0; if ((x <= -2.9e+30) || ~((x <= 1200000000000.0))) tmp = 4.0 * ((x - z) / y); else tmp = 4.0 + (-4.0 * (z / y)); end tmp_2 = tmp; end
code[x_, y_, z_] := If[Or[LessEqual[x, -2.9e+30], N[Not[LessEqual[x, 1200000000000.0]], $MachinePrecision]], N[(4.0 * N[(N[(x - z), $MachinePrecision] / y), $MachinePrecision]), $MachinePrecision], N[(4.0 + N[(-4.0 * N[(z / y), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;x \leq -2.9 \cdot 10^{+30} \lor \neg \left(x \leq 1200000000000\right):\\
\;\;\;\;4 \cdot \frac{x - z}{y}\\
\mathbf{else}:\\
\;\;\;\;4 + -4 \cdot \frac{z}{y}\\
\end{array}
\end{array}
if x < -2.8999999999999998e30 or 1.2e12 < x Initial program 99.2%
associate-*l/99.8%
+-commutative99.8%
fma-def99.7%
Simplified99.7%
Taylor expanded in y around 0 100.0%
Taylor expanded in y around 0 80.8%
if -2.8999999999999998e30 < x < 1.2e12Initial program 99.9%
associate-*l/99.6%
+-commutative99.6%
fma-def99.6%
Simplified99.6%
Taylor expanded in y around 0 100.0%
Taylor expanded in x around 0 94.6%
Final simplification87.9%
(FPCore (x y z) :precision binary64 (if (or (<= x -2.1e+27) (not (<= x 34000000000000.0))) (+ 4.0 (/ (* 4.0 x) y)) (+ 4.0 (* -4.0 (/ z y)))))
double code(double x, double y, double z) {
double tmp;
if ((x <= -2.1e+27) || !(x <= 34000000000000.0)) {
tmp = 4.0 + ((4.0 * x) / y);
} else {
tmp = 4.0 + (-4.0 * (z / y));
}
return tmp;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8) :: tmp
if ((x <= (-2.1d+27)) .or. (.not. (x <= 34000000000000.0d0))) then
tmp = 4.0d0 + ((4.0d0 * x) / y)
else
tmp = 4.0d0 + ((-4.0d0) * (z / y))
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double tmp;
if ((x <= -2.1e+27) || !(x <= 34000000000000.0)) {
tmp = 4.0 + ((4.0 * x) / y);
} else {
tmp = 4.0 + (-4.0 * (z / y));
}
return tmp;
}
def code(x, y, z): tmp = 0 if (x <= -2.1e+27) or not (x <= 34000000000000.0): tmp = 4.0 + ((4.0 * x) / y) else: tmp = 4.0 + (-4.0 * (z / y)) return tmp
function code(x, y, z) tmp = 0.0 if ((x <= -2.1e+27) || !(x <= 34000000000000.0)) tmp = Float64(4.0 + Float64(Float64(4.0 * x) / y)); else tmp = Float64(4.0 + Float64(-4.0 * Float64(z / y))); end return tmp end
function tmp_2 = code(x, y, z) tmp = 0.0; if ((x <= -2.1e+27) || ~((x <= 34000000000000.0))) tmp = 4.0 + ((4.0 * x) / y); else tmp = 4.0 + (-4.0 * (z / y)); end tmp_2 = tmp; end
code[x_, y_, z_] := If[Or[LessEqual[x, -2.1e+27], N[Not[LessEqual[x, 34000000000000.0]], $MachinePrecision]], N[(4.0 + N[(N[(4.0 * x), $MachinePrecision] / y), $MachinePrecision]), $MachinePrecision], N[(4.0 + N[(-4.0 * N[(z / y), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;x \leq -2.1 \cdot 10^{+27} \lor \neg \left(x \leq 34000000000000\right):\\
\;\;\;\;4 + \frac{4 \cdot x}{y}\\
\mathbf{else}:\\
\;\;\;\;4 + -4 \cdot \frac{z}{y}\\
\end{array}
\end{array}
if x < -2.09999999999999995e27 or 3.4e13 < x Initial program 99.2%
associate-*l/99.8%
+-commutative99.8%
fma-def99.7%
Simplified99.7%
Taylor expanded in y around 0 100.0%
Taylor expanded in z around 0 87.5%
associate-*r/86.7%
Simplified86.7%
if -2.09999999999999995e27 < x < 3.4e13Initial program 99.9%
associate-*l/99.6%
+-commutative99.6%
fma-def99.6%
Simplified99.6%
Taylor expanded in y around 0 100.0%
Taylor expanded in x around 0 94.6%
Final simplification90.8%
(FPCore (x y z) :precision binary64 (if (<= y -2.2e+171) 4.0 (if (<= y 2.25e+126) (* 4.0 (/ (- x z) y)) 4.0)))
double code(double x, double y, double z) {
double tmp;
if (y <= -2.2e+171) {
tmp = 4.0;
} else if (y <= 2.25e+126) {
tmp = 4.0 * ((x - z) / y);
} else {
tmp = 4.0;
}
return tmp;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8) :: tmp
if (y <= (-2.2d+171)) then
tmp = 4.0d0
else if (y <= 2.25d+126) then
tmp = 4.0d0 * ((x - z) / y)
else
tmp = 4.0d0
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double tmp;
if (y <= -2.2e+171) {
tmp = 4.0;
} else if (y <= 2.25e+126) {
tmp = 4.0 * ((x - z) / y);
} else {
tmp = 4.0;
}
return tmp;
}
def code(x, y, z): tmp = 0 if y <= -2.2e+171: tmp = 4.0 elif y <= 2.25e+126: tmp = 4.0 * ((x - z) / y) else: tmp = 4.0 return tmp
function code(x, y, z) tmp = 0.0 if (y <= -2.2e+171) tmp = 4.0; elseif (y <= 2.25e+126) tmp = Float64(4.0 * Float64(Float64(x - z) / y)); else tmp = 4.0; end return tmp end
function tmp_2 = code(x, y, z) tmp = 0.0; if (y <= -2.2e+171) tmp = 4.0; elseif (y <= 2.25e+126) tmp = 4.0 * ((x - z) / y); else tmp = 4.0; end tmp_2 = tmp; end
code[x_, y_, z_] := If[LessEqual[y, -2.2e+171], 4.0, If[LessEqual[y, 2.25e+126], N[(4.0 * N[(N[(x - z), $MachinePrecision] / y), $MachinePrecision]), $MachinePrecision], 4.0]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;y \leq -2.2 \cdot 10^{+171}:\\
\;\;\;\;4\\
\mathbf{elif}\;y \leq 2.25 \cdot 10^{+126}:\\
\;\;\;\;4 \cdot \frac{x - z}{y}\\
\mathbf{else}:\\
\;\;\;\;4\\
\end{array}
\end{array}
if y < -2.1999999999999999e171 or 2.24999999999999987e126 < y Initial program 99.8%
associate-*l/99.6%
+-commutative99.6%
fma-def99.5%
Simplified99.5%
Taylor expanded in y around inf 83.4%
if -2.1999999999999999e171 < y < 2.24999999999999987e126Initial program 99.5%
associate-*l/99.7%
+-commutative99.7%
fma-def99.7%
Simplified99.7%
Taylor expanded in y around 0 100.0%
Taylor expanded in y around 0 82.3%
Final simplification82.6%
(FPCore (x y z) :precision binary64 (if (<= y -1.5e+92) 4.0 (if (<= y 7.2e-77) (* -4.0 (/ z y)) 4.0)))
double code(double x, double y, double z) {
double tmp;
if (y <= -1.5e+92) {
tmp = 4.0;
} else if (y <= 7.2e-77) {
tmp = -4.0 * (z / y);
} else {
tmp = 4.0;
}
return tmp;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8) :: tmp
if (y <= (-1.5d+92)) then
tmp = 4.0d0
else if (y <= 7.2d-77) then
tmp = (-4.0d0) * (z / y)
else
tmp = 4.0d0
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double tmp;
if (y <= -1.5e+92) {
tmp = 4.0;
} else if (y <= 7.2e-77) {
tmp = -4.0 * (z / y);
} else {
tmp = 4.0;
}
return tmp;
}
def code(x, y, z): tmp = 0 if y <= -1.5e+92: tmp = 4.0 elif y <= 7.2e-77: tmp = -4.0 * (z / y) else: tmp = 4.0 return tmp
function code(x, y, z) tmp = 0.0 if (y <= -1.5e+92) tmp = 4.0; elseif (y <= 7.2e-77) tmp = Float64(-4.0 * Float64(z / y)); else tmp = 4.0; end return tmp end
function tmp_2 = code(x, y, z) tmp = 0.0; if (y <= -1.5e+92) tmp = 4.0; elseif (y <= 7.2e-77) tmp = -4.0 * (z / y); else tmp = 4.0; end tmp_2 = tmp; end
code[x_, y_, z_] := If[LessEqual[y, -1.5e+92], 4.0, If[LessEqual[y, 7.2e-77], N[(-4.0 * N[(z / y), $MachinePrecision]), $MachinePrecision], 4.0]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;y \leq -1.5 \cdot 10^{+92}:\\
\;\;\;\;4\\
\mathbf{elif}\;y \leq 7.2 \cdot 10^{-77}:\\
\;\;\;\;-4 \cdot \frac{z}{y}\\
\mathbf{else}:\\
\;\;\;\;4\\
\end{array}
\end{array}
if y < -1.50000000000000007e92 or 7.2e-77 < y Initial program 99.1%
associate-*l/99.7%
+-commutative99.7%
fma-def99.6%
Simplified99.6%
Taylor expanded in y around inf 59.6%
if -1.50000000000000007e92 < y < 7.2e-77Initial program 100.0%
associate-*l/99.7%
+-commutative99.7%
fma-def99.7%
Simplified99.7%
Taylor expanded in y around 0 100.0%
Taylor expanded in x around 0 58.0%
Taylor expanded in z around inf 48.6%
Final simplification54.0%
(FPCore (x y z) :precision binary64 1.0)
double code(double x, double y, double z) {
return 1.0;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = 1.0d0
end function
public static double code(double x, double y, double z) {
return 1.0;
}
def code(x, y, z): return 1.0
function code(x, y, z) return 1.0 end
function tmp = code(x, y, z) tmp = 1.0; end
code[x_, y_, z_] := 1.0
\begin{array}{l}
\\
1
\end{array}
Initial program 99.6%
associate-*l/99.7%
+-commutative99.7%
fma-def99.7%
Simplified99.7%
Taylor expanded in x around inf 41.9%
Taylor expanded in x around 0 7.7%
Final simplification7.7%
(FPCore (x y z) :precision binary64 4.0)
double code(double x, double y, double z) {
return 4.0;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = 4.0d0
end function
public static double code(double x, double y, double z) {
return 4.0;
}
def code(x, y, z): return 4.0
function code(x, y, z) return 4.0 end
function tmp = code(x, y, z) tmp = 4.0; end
code[x_, y_, z_] := 4.0
\begin{array}{l}
\\
4
\end{array}
Initial program 99.6%
associate-*l/99.7%
+-commutative99.7%
fma-def99.7%
Simplified99.7%
Taylor expanded in y around inf 35.0%
Final simplification35.0%
herbie shell --seed 2023320
(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)))