
(FPCore (x y z) :precision binary64 (/ (* x (- y z)) y))
double code(double x, double y, double z) {
return (x * (y - 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 = (x * (y - z)) / y
end function
public static double code(double x, double y, double z) {
return (x * (y - z)) / y;
}
def code(x, y, z): return (x * (y - z)) / y
function code(x, y, z) return Float64(Float64(x * Float64(y - z)) / y) end
function tmp = code(x, y, z) tmp = (x * (y - z)) / y; end
code[x_, y_, z_] := N[(N[(x * N[(y - z), $MachinePrecision]), $MachinePrecision] / y), $MachinePrecision]
\begin{array}{l}
\\
\frac{x \cdot \left(y - z\right)}{y}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 8 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x y z) :precision binary64 (/ (* x (- y z)) y))
double code(double x, double y, double z) {
return (x * (y - 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 = (x * (y - z)) / y
end function
public static double code(double x, double y, double z) {
return (x * (y - z)) / y;
}
def code(x, y, z): return (x * (y - z)) / y
function code(x, y, z) return Float64(Float64(x * Float64(y - z)) / y) end
function tmp = code(x, y, z) tmp = (x * (y - z)) / y; end
code[x_, y_, z_] := N[(N[(x * N[(y - z), $MachinePrecision]), $MachinePrecision] / y), $MachinePrecision]
\begin{array}{l}
\\
\frac{x \cdot \left(y - z\right)}{y}
\end{array}
(FPCore (x y z) :precision binary64 (fma (/ z (- y)) x x))
double code(double x, double y, double z) {
return fma((z / -y), x, x);
}
function code(x, y, z) return fma(Float64(z / Float64(-y)), x, x) end
code[x_, y_, z_] := N[(N[(z / (-y)), $MachinePrecision] * x + x), $MachinePrecision]
\begin{array}{l}
\\
\mathsf{fma}\left(\frac{z}{-y}, x, x\right)
\end{array}
Initial program 84.6%
lift--.f64N/A
lift-*.f64N/A
remove-double-negN/A
remove-double-negN/A
lift-*.f64N/A
associate-/l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f6495.8
Applied rewrites95.8%
lift--.f64N/A
associate-*l/N/A
*-commutativeN/A
associate-*l/N/A
lift-/.f64N/A
lift--.f64N/A
sub-negN/A
+-commutativeN/A
distribute-rgt-inN/A
lift-/.f64N/A
associate-/l*N/A
*-commutativeN/A
associate-/l*N/A
*-inversesN/A
*-rgt-identityN/A
lift-/.f64N/A
clear-numN/A
associate-/r/N/A
lift-/.f64N/A
associate-*r*N/A
distribute-lft-neg-inN/A
lift-/.f64N/A
div-invN/A
lower-fma.f64N/A
Applied rewrites95.9%
(FPCore (x y z)
:precision binary64
(let* ((t_0 (/ (* x (- y z)) y)))
(if (<= t_0 0.0)
(- (* x (/ z y)))
(if (<= t_0 2e+171)
x
(if (<= t_0 1e+305) (/ (* x (- z)) y) (* y (/ x y)))))))
double code(double x, double y, double z) {
double t_0 = (x * (y - z)) / y;
double tmp;
if (t_0 <= 0.0) {
tmp = -(x * (z / y));
} else if (t_0 <= 2e+171) {
tmp = x;
} else if (t_0 <= 1e+305) {
tmp = (x * -z) / y;
} else {
tmp = y * (x / 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) :: t_0
real(8) :: tmp
t_0 = (x * (y - z)) / y
if (t_0 <= 0.0d0) then
tmp = -(x * (z / y))
else if (t_0 <= 2d+171) then
tmp = x
else if (t_0 <= 1d+305) then
tmp = (x * -z) / y
else
tmp = y * (x / y)
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double t_0 = (x * (y - z)) / y;
double tmp;
if (t_0 <= 0.0) {
tmp = -(x * (z / y));
} else if (t_0 <= 2e+171) {
tmp = x;
} else if (t_0 <= 1e+305) {
tmp = (x * -z) / y;
} else {
tmp = y * (x / y);
}
return tmp;
}
def code(x, y, z): t_0 = (x * (y - z)) / y tmp = 0 if t_0 <= 0.0: tmp = -(x * (z / y)) elif t_0 <= 2e+171: tmp = x elif t_0 <= 1e+305: tmp = (x * -z) / y else: tmp = y * (x / y) return tmp
function code(x, y, z) t_0 = Float64(Float64(x * Float64(y - z)) / y) tmp = 0.0 if (t_0 <= 0.0) tmp = Float64(-Float64(x * Float64(z / y))); elseif (t_0 <= 2e+171) tmp = x; elseif (t_0 <= 1e+305) tmp = Float64(Float64(x * Float64(-z)) / y); else tmp = Float64(y * Float64(x / y)); end return tmp end
function tmp_2 = code(x, y, z) t_0 = (x * (y - z)) / y; tmp = 0.0; if (t_0 <= 0.0) tmp = -(x * (z / y)); elseif (t_0 <= 2e+171) tmp = x; elseif (t_0 <= 1e+305) tmp = (x * -z) / y; else tmp = y * (x / y); end tmp_2 = tmp; end
code[x_, y_, z_] := Block[{t$95$0 = N[(N[(x * N[(y - z), $MachinePrecision]), $MachinePrecision] / y), $MachinePrecision]}, If[LessEqual[t$95$0, 0.0], (-N[(x * N[(z / y), $MachinePrecision]), $MachinePrecision]), If[LessEqual[t$95$0, 2e+171], x, If[LessEqual[t$95$0, 1e+305], N[(N[(x * (-z)), $MachinePrecision] / y), $MachinePrecision], N[(y * N[(x / y), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{x \cdot \left(y - z\right)}{y}\\
\mathbf{if}\;t\_0 \leq 0:\\
\;\;\;\;-x \cdot \frac{z}{y}\\
\mathbf{elif}\;t\_0 \leq 2 \cdot 10^{+171}:\\
\;\;\;\;x\\
\mathbf{elif}\;t\_0 \leq 10^{+305}:\\
\;\;\;\;\frac{x \cdot \left(-z\right)}{y}\\
\mathbf{else}:\\
\;\;\;\;y \cdot \frac{x}{y}\\
\end{array}
\end{array}
if (/.f64 (*.f64 x (-.f64 y z)) y) < -0.0Initial program 79.3%
lift--.f64N/A
lift-*.f64N/A
remove-double-negN/A
remove-double-negN/A
lift-*.f64N/A
associate-/l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f6497.6
Applied rewrites97.6%
Taylor expanded in y around 0
mul-1-negN/A
lower-neg.f6449.1
Applied rewrites49.1%
if -0.0 < (/.f64 (*.f64 x (-.f64 y z)) y) < 1.99999999999999991e171Initial program 99.7%
Taylor expanded in y around inf
lower-*.f6465.7
Applied rewrites65.7%
associate-/l*N/A
*-inversesN/A
*-rgt-identity65.9
Applied rewrites65.9%
if 1.99999999999999991e171 < (/.f64 (*.f64 x (-.f64 y z)) y) < 9.9999999999999994e304Initial program 99.5%
Taylor expanded in y around 0
associate-*r/N/A
lower-/.f64N/A
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
mul-1-negN/A
lower-neg.f6484.9
Applied rewrites84.9%
if 9.9999999999999994e304 < (/.f64 (*.f64 x (-.f64 y z)) y) Initial program 59.9%
Taylor expanded in y around inf
lower-*.f645.6
Applied rewrites5.6%
associate-*l/N/A
lift-/.f64N/A
lower-*.f6461.5
Applied rewrites61.5%
Final simplification58.7%
(FPCore (x y z)
:precision binary64
(let* ((t_0 (/ (* x (- y z)) y)) (t_1 (- (* x (/ z y)))))
(if (<= t_0 0.0)
t_1
(if (<= t_0 2e+171) x (if (<= t_0 1e+305) t_1 (* y (/ x y)))))))
double code(double x, double y, double z) {
double t_0 = (x * (y - z)) / y;
double t_1 = -(x * (z / y));
double tmp;
if (t_0 <= 0.0) {
tmp = t_1;
} else if (t_0 <= 2e+171) {
tmp = x;
} else if (t_0 <= 1e+305) {
tmp = t_1;
} else {
tmp = y * (x / 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) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (x * (y - z)) / y
t_1 = -(x * (z / y))
if (t_0 <= 0.0d0) then
tmp = t_1
else if (t_0 <= 2d+171) then
tmp = x
else if (t_0 <= 1d+305) then
tmp = t_1
else
tmp = y * (x / y)
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double t_0 = (x * (y - z)) / y;
double t_1 = -(x * (z / y));
double tmp;
if (t_0 <= 0.0) {
tmp = t_1;
} else if (t_0 <= 2e+171) {
tmp = x;
} else if (t_0 <= 1e+305) {
tmp = t_1;
} else {
tmp = y * (x / y);
}
return tmp;
}
def code(x, y, z): t_0 = (x * (y - z)) / y t_1 = -(x * (z / y)) tmp = 0 if t_0 <= 0.0: tmp = t_1 elif t_0 <= 2e+171: tmp = x elif t_0 <= 1e+305: tmp = t_1 else: tmp = y * (x / y) return tmp
function code(x, y, z) t_0 = Float64(Float64(x * Float64(y - z)) / y) t_1 = Float64(-Float64(x * Float64(z / y))) tmp = 0.0 if (t_0 <= 0.0) tmp = t_1; elseif (t_0 <= 2e+171) tmp = x; elseif (t_0 <= 1e+305) tmp = t_1; else tmp = Float64(y * Float64(x / y)); end return tmp end
function tmp_2 = code(x, y, z) t_0 = (x * (y - z)) / y; t_1 = -(x * (z / y)); tmp = 0.0; if (t_0 <= 0.0) tmp = t_1; elseif (t_0 <= 2e+171) tmp = x; elseif (t_0 <= 1e+305) tmp = t_1; else tmp = y * (x / y); end tmp_2 = tmp; end
code[x_, y_, z_] := Block[{t$95$0 = N[(N[(x * N[(y - z), $MachinePrecision]), $MachinePrecision] / y), $MachinePrecision]}, Block[{t$95$1 = (-N[(x * N[(z / y), $MachinePrecision]), $MachinePrecision])}, If[LessEqual[t$95$0, 0.0], t$95$1, If[LessEqual[t$95$0, 2e+171], x, If[LessEqual[t$95$0, 1e+305], t$95$1, N[(y * N[(x / y), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{x \cdot \left(y - z\right)}{y}\\
t_1 := -x \cdot \frac{z}{y}\\
\mathbf{if}\;t\_0 \leq 0:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_0 \leq 2 \cdot 10^{+171}:\\
\;\;\;\;x\\
\mathbf{elif}\;t\_0 \leq 10^{+305}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;y \cdot \frac{x}{y}\\
\end{array}
\end{array}
if (/.f64 (*.f64 x (-.f64 y z)) y) < -0.0 or 1.99999999999999991e171 < (/.f64 (*.f64 x (-.f64 y z)) y) < 9.9999999999999994e304Initial program 82.4%
lift--.f64N/A
lift-*.f64N/A
remove-double-negN/A
remove-double-negN/A
lift-*.f64N/A
associate-/l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f6493.6
Applied rewrites93.6%
Taylor expanded in y around 0
mul-1-negN/A
lower-neg.f6450.3
Applied rewrites50.3%
if -0.0 < (/.f64 (*.f64 x (-.f64 y z)) y) < 1.99999999999999991e171Initial program 99.7%
Taylor expanded in y around inf
lower-*.f6465.7
Applied rewrites65.7%
associate-/l*N/A
*-inversesN/A
*-rgt-identity65.9
Applied rewrites65.9%
if 9.9999999999999994e304 < (/.f64 (*.f64 x (-.f64 y z)) y) Initial program 59.9%
Taylor expanded in y around inf
lower-*.f645.6
Applied rewrites5.6%
associate-*l/N/A
lift-/.f64N/A
lower-*.f6461.5
Applied rewrites61.5%
Final simplification56.2%
(FPCore (x y z) :precision binary64 (let* ((t_0 (/ (* x (- y z)) y)) (t_1 (* (- y z) (/ x y)))) (if (<= t_0 0.0) t_1 (if (<= t_0 1e-39) x t_1))))
double code(double x, double y, double z) {
double t_0 = (x * (y - z)) / y;
double t_1 = (y - z) * (x / y);
double tmp;
if (t_0 <= 0.0) {
tmp = t_1;
} else if (t_0 <= 1e-39) {
tmp = x;
} else {
tmp = t_1;
}
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 = (x * (y - z)) / y
t_1 = (y - z) * (x / y)
if (t_0 <= 0.0d0) then
tmp = t_1
else if (t_0 <= 1d-39) then
tmp = x
else
tmp = t_1
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double t_0 = (x * (y - z)) / y;
double t_1 = (y - z) * (x / y);
double tmp;
if (t_0 <= 0.0) {
tmp = t_1;
} else if (t_0 <= 1e-39) {
tmp = x;
} else {
tmp = t_1;
}
return tmp;
}
def code(x, y, z): t_0 = (x * (y - z)) / y t_1 = (y - z) * (x / y) tmp = 0 if t_0 <= 0.0: tmp = t_1 elif t_0 <= 1e-39: tmp = x else: tmp = t_1 return tmp
function code(x, y, z) t_0 = Float64(Float64(x * Float64(y - z)) / y) t_1 = Float64(Float64(y - z) * Float64(x / y)) tmp = 0.0 if (t_0 <= 0.0) tmp = t_1; elseif (t_0 <= 1e-39) tmp = x; else tmp = t_1; end return tmp end
function tmp_2 = code(x, y, z) t_0 = (x * (y - z)) / y; t_1 = (y - z) * (x / y); tmp = 0.0; if (t_0 <= 0.0) tmp = t_1; elseif (t_0 <= 1e-39) tmp = x; else tmp = t_1; end tmp_2 = tmp; end
code[x_, y_, z_] := Block[{t$95$0 = N[(N[(x * N[(y - z), $MachinePrecision]), $MachinePrecision] / y), $MachinePrecision]}, Block[{t$95$1 = N[(N[(y - z), $MachinePrecision] * N[(x / y), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, 0.0], t$95$1, If[LessEqual[t$95$0, 1e-39], x, t$95$1]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{x \cdot \left(y - z\right)}{y}\\
t_1 := \left(y - z\right) \cdot \frac{x}{y}\\
\mathbf{if}\;t\_0 \leq 0:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_0 \leq 10^{-39}:\\
\;\;\;\;x\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if (/.f64 (*.f64 x (-.f64 y z)) y) < -0.0 or 9.99999999999999929e-40 < (/.f64 (*.f64 x (-.f64 y z)) y) Initial program 81.0%
lift--.f64N/A
lift-*.f64N/A
remove-double-negN/A
remove-double-negN/A
lift-*.f64N/A
*-commutativeN/A
associate-/l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f6484.4
Applied rewrites84.4%
if -0.0 < (/.f64 (*.f64 x (-.f64 y z)) y) < 9.99999999999999929e-40Initial program 99.7%
Taylor expanded in y around inf
lower-*.f6471.8
Applied rewrites71.8%
associate-/l*N/A
*-inversesN/A
*-rgt-identity72.0
Applied rewrites72.0%
Final simplification82.0%
(FPCore (x y z) :precision binary64 (let* ((t_0 (/ (* x (- y z)) y))) (if (<= t_0 0.0) (* (/ x y) (- z)) (if (<= t_0 5e+275) x (* y (/ x y))))))
double code(double x, double y, double z) {
double t_0 = (x * (y - z)) / y;
double tmp;
if (t_0 <= 0.0) {
tmp = (x / y) * -z;
} else if (t_0 <= 5e+275) {
tmp = x;
} else {
tmp = y * (x / 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) :: t_0
real(8) :: tmp
t_0 = (x * (y - z)) / y
if (t_0 <= 0.0d0) then
tmp = (x / y) * -z
else if (t_0 <= 5d+275) then
tmp = x
else
tmp = y * (x / y)
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double t_0 = (x * (y - z)) / y;
double tmp;
if (t_0 <= 0.0) {
tmp = (x / y) * -z;
} else if (t_0 <= 5e+275) {
tmp = x;
} else {
tmp = y * (x / y);
}
return tmp;
}
def code(x, y, z): t_0 = (x * (y - z)) / y tmp = 0 if t_0 <= 0.0: tmp = (x / y) * -z elif t_0 <= 5e+275: tmp = x else: tmp = y * (x / y) return tmp
function code(x, y, z) t_0 = Float64(Float64(x * Float64(y - z)) / y) tmp = 0.0 if (t_0 <= 0.0) tmp = Float64(Float64(x / y) * Float64(-z)); elseif (t_0 <= 5e+275) tmp = x; else tmp = Float64(y * Float64(x / y)); end return tmp end
function tmp_2 = code(x, y, z) t_0 = (x * (y - z)) / y; tmp = 0.0; if (t_0 <= 0.0) tmp = (x / y) * -z; elseif (t_0 <= 5e+275) tmp = x; else tmp = y * (x / y); end tmp_2 = tmp; end
code[x_, y_, z_] := Block[{t$95$0 = N[(N[(x * N[(y - z), $MachinePrecision]), $MachinePrecision] / y), $MachinePrecision]}, If[LessEqual[t$95$0, 0.0], N[(N[(x / y), $MachinePrecision] * (-z)), $MachinePrecision], If[LessEqual[t$95$0, 5e+275], x, N[(y * N[(x / y), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{x \cdot \left(y - z\right)}{y}\\
\mathbf{if}\;t\_0 \leq 0:\\
\;\;\;\;\frac{x}{y} \cdot \left(-z\right)\\
\mathbf{elif}\;t\_0 \leq 5 \cdot 10^{+275}:\\
\;\;\;\;x\\
\mathbf{else}:\\
\;\;\;\;y \cdot \frac{x}{y}\\
\end{array}
\end{array}
if (/.f64 (*.f64 x (-.f64 y z)) y) < -0.0Initial program 79.3%
Taylor expanded in y around 0
associate-*r/N/A
lower-/.f64N/A
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
mul-1-negN/A
lower-neg.f6444.9
Applied rewrites44.9%
lift-neg.f64N/A
*-commutativeN/A
associate-*l/N/A
lower-*.f64N/A
remove-double-negN/A
lift-neg.f64N/A
frac-2negN/A
lower-/.f64N/A
lower-neg.f6446.8
Applied rewrites46.8%
if -0.0 < (/.f64 (*.f64 x (-.f64 y z)) y) < 5.0000000000000003e275Initial program 99.6%
Taylor expanded in y around inf
lower-*.f6456.6
Applied rewrites56.6%
associate-/l*N/A
*-inversesN/A
*-rgt-identity56.8
Applied rewrites56.8%
if 5.0000000000000003e275 < (/.f64 (*.f64 x (-.f64 y z)) y) Initial program 65.2%
Taylor expanded in y around inf
lower-*.f645.4
Applied rewrites5.4%
associate-*l/N/A
lift-/.f64N/A
lower-*.f6453.9
Applied rewrites53.9%
Final simplification51.4%
(FPCore (x y z) :precision binary64 (if (<= (/ (* x (- y z)) y) 5e+275) x (* y (/ x y))))
double code(double x, double y, double z) {
double tmp;
if (((x * (y - z)) / y) <= 5e+275) {
tmp = x;
} else {
tmp = y * (x / 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 * (y - z)) / y) <= 5d+275) then
tmp = x
else
tmp = y * (x / y)
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double tmp;
if (((x * (y - z)) / y) <= 5e+275) {
tmp = x;
} else {
tmp = y * (x / y);
}
return tmp;
}
def code(x, y, z): tmp = 0 if ((x * (y - z)) / y) <= 5e+275: tmp = x else: tmp = y * (x / y) return tmp
function code(x, y, z) tmp = 0.0 if (Float64(Float64(x * Float64(y - z)) / y) <= 5e+275) tmp = x; else tmp = Float64(y * Float64(x / y)); end return tmp end
function tmp_2 = code(x, y, z) tmp = 0.0; if (((x * (y - z)) / y) <= 5e+275) tmp = x; else tmp = y * (x / y); end tmp_2 = tmp; end
code[x_, y_, z_] := If[LessEqual[N[(N[(x * N[(y - z), $MachinePrecision]), $MachinePrecision] / y), $MachinePrecision], 5e+275], x, N[(y * N[(x / y), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\frac{x \cdot \left(y - z\right)}{y} \leq 5 \cdot 10^{+275}:\\
\;\;\;\;x\\
\mathbf{else}:\\
\;\;\;\;y \cdot \frac{x}{y}\\
\end{array}
\end{array}
if (/.f64 (*.f64 x (-.f64 y z)) y) < 5.0000000000000003e275Initial program 87.8%
Taylor expanded in y around inf
lower-*.f6445.3
Applied rewrites45.3%
associate-/l*N/A
*-inversesN/A
*-rgt-identity53.3
Applied rewrites53.3%
if 5.0000000000000003e275 < (/.f64 (*.f64 x (-.f64 y z)) y) Initial program 65.2%
Taylor expanded in y around inf
lower-*.f645.4
Applied rewrites5.4%
associate-*l/N/A
lift-/.f64N/A
lower-*.f6453.9
Applied rewrites53.9%
Final simplification53.4%
(FPCore (x y z) :precision binary64 (* x (/ (- y z) y)))
double code(double x, double y, double z) {
return x * ((y - 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 = x * ((y - z) / y)
end function
public static double code(double x, double y, double z) {
return x * ((y - z) / y);
}
def code(x, y, z): return x * ((y - z) / y)
function code(x, y, z) return Float64(x * Float64(Float64(y - z) / y)) end
function tmp = code(x, y, z) tmp = x * ((y - z) / y); end
code[x_, y_, z_] := N[(x * N[(N[(y - z), $MachinePrecision] / y), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
x \cdot \frac{y - z}{y}
\end{array}
Initial program 84.6%
lift--.f64N/A
lift-*.f64N/A
remove-double-negN/A
remove-double-negN/A
lift-*.f64N/A
associate-/l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f6495.8
Applied rewrites95.8%
Final simplification95.8%
(FPCore (x y z) :precision binary64 x)
double code(double x, double y, double z) {
return x;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = x
end function
public static double code(double x, double y, double z) {
return x;
}
def code(x, y, z): return x
function code(x, y, z) return x end
function tmp = code(x, y, z) tmp = x; end
code[x_, y_, z_] := x
\begin{array}{l}
\\
x
\end{array}
Initial program 84.6%
Taylor expanded in y around inf
lower-*.f6439.6
Applied rewrites39.6%
associate-/l*N/A
*-inversesN/A
*-rgt-identity50.5
Applied rewrites50.5%
(FPCore (x y z) :precision binary64 (if (< z -2.060202331921739e+104) (- x (/ (* z x) y)) (if (< z 1.6939766013828526e+213) (/ x (/ y (- y z))) (* (- y z) (/ x y)))))
double code(double x, double y, double z) {
double tmp;
if (z < -2.060202331921739e+104) {
tmp = x - ((z * x) / y);
} else if (z < 1.6939766013828526e+213) {
tmp = x / (y / (y - z));
} else {
tmp = (y - z) * (x / 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 (z < (-2.060202331921739d+104)) then
tmp = x - ((z * x) / y)
else if (z < 1.6939766013828526d+213) then
tmp = x / (y / (y - z))
else
tmp = (y - z) * (x / y)
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double tmp;
if (z < -2.060202331921739e+104) {
tmp = x - ((z * x) / y);
} else if (z < 1.6939766013828526e+213) {
tmp = x / (y / (y - z));
} else {
tmp = (y - z) * (x / y);
}
return tmp;
}
def code(x, y, z): tmp = 0 if z < -2.060202331921739e+104: tmp = x - ((z * x) / y) elif z < 1.6939766013828526e+213: tmp = x / (y / (y - z)) else: tmp = (y - z) * (x / y) return tmp
function code(x, y, z) tmp = 0.0 if (z < -2.060202331921739e+104) tmp = Float64(x - Float64(Float64(z * x) / y)); elseif (z < 1.6939766013828526e+213) tmp = Float64(x / Float64(y / Float64(y - z))); else tmp = Float64(Float64(y - z) * Float64(x / y)); end return tmp end
function tmp_2 = code(x, y, z) tmp = 0.0; if (z < -2.060202331921739e+104) tmp = x - ((z * x) / y); elseif (z < 1.6939766013828526e+213) tmp = x / (y / (y - z)); else tmp = (y - z) * (x / y); end tmp_2 = tmp; end
code[x_, y_, z_] := If[Less[z, -2.060202331921739e+104], N[(x - N[(N[(z * x), $MachinePrecision] / y), $MachinePrecision]), $MachinePrecision], If[Less[z, 1.6939766013828526e+213], N[(x / N[(y / N[(y - z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(y - z), $MachinePrecision] * N[(x / y), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;z < -2.060202331921739 \cdot 10^{+104}:\\
\;\;\;\;x - \frac{z \cdot x}{y}\\
\mathbf{elif}\;z < 1.6939766013828526 \cdot 10^{+213}:\\
\;\;\;\;\frac{x}{\frac{y}{y - z}}\\
\mathbf{else}:\\
\;\;\;\;\left(y - z\right) \cdot \frac{x}{y}\\
\end{array}
\end{array}
herbie shell --seed 2024219
(FPCore (x y z)
:name "Diagrams.Backend.Cairo.Internal:setTexture from diagrams-cairo-1.3.0.3"
:precision binary64
:alt
(! :herbie-platform default (if (< z -206020233192173900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) (- x (/ (* z x) y)) (if (< z 1693976601382852600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) (/ x (/ y (- y z))) (* (- y z) (/ x y)))))
(/ (* x (- y z)) y))