
(FPCore (x y z) :precision binary64 (+ x (* (- y x) z)))
double code(double x, double y, double z) {
return x + ((y - x) * z);
}
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 - x) * z)
end function
public static double code(double x, double y, double z) {
return x + ((y - x) * z);
}
def code(x, y, z): return x + ((y - x) * z)
function code(x, y, z) return Float64(x + Float64(Float64(y - x) * z)) end
function tmp = code(x, y, z) tmp = x + ((y - x) * z); end
code[x_, y_, z_] := N[(x + N[(N[(y - x), $MachinePrecision] * z), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
x + \left(y - x\right) \cdot z
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 10 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x y z) :precision binary64 (+ x (* (- y x) z)))
double code(double x, double y, double z) {
return x + ((y - x) * z);
}
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 - x) * z)
end function
public static double code(double x, double y, double z) {
return x + ((y - x) * z);
}
def code(x, y, z): return x + ((y - x) * z)
function code(x, y, z) return Float64(x + Float64(Float64(y - x) * z)) end
function tmp = code(x, y, z) tmp = x + ((y - x) * z); end
code[x_, y_, z_] := N[(x + N[(N[(y - x), $MachinePrecision] * z), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
x + \left(y - x\right) \cdot z
\end{array}
(FPCore (x y z) :precision binary64 (fma (- y x) z x))
double code(double x, double y, double z) {
return fma((y - x), z, x);
}
function code(x, y, z) return fma(Float64(y - x), z, x) end
code[x_, y_, z_] := N[(N[(y - x), $MachinePrecision] * z + x), $MachinePrecision]
\begin{array}{l}
\\
\mathsf{fma}\left(y - x, z, x\right)
\end{array}
Initial program 100.0%
+-commutative100.0%
fma-define100.0%
Simplified100.0%
(FPCore (x y z)
:precision binary64
(let* ((t_0 (* x (- z))))
(if (<= z -2.25e+266)
t_0
(if (<= z -1.15e+178)
(* y z)
(if (<= z -3.4e+96)
t_0
(if (<= z -7e-97)
(* y z)
(if (<= z 1e-118)
x
(if (or (<= z 6.2e+24) (not (<= z 8.5e+162))) (* y z) t_0))))))))
double code(double x, double y, double z) {
double t_0 = x * -z;
double tmp;
if (z <= -2.25e+266) {
tmp = t_0;
} else if (z <= -1.15e+178) {
tmp = y * z;
} else if (z <= -3.4e+96) {
tmp = t_0;
} else if (z <= -7e-97) {
tmp = y * z;
} else if (z <= 1e-118) {
tmp = x;
} else if ((z <= 6.2e+24) || !(z <= 8.5e+162)) {
tmp = y * z;
} 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) :: tmp
t_0 = x * -z
if (z <= (-2.25d+266)) then
tmp = t_0
else if (z <= (-1.15d+178)) then
tmp = y * z
else if (z <= (-3.4d+96)) then
tmp = t_0
else if (z <= (-7d-97)) then
tmp = y * z
else if (z <= 1d-118) then
tmp = x
else if ((z <= 6.2d+24) .or. (.not. (z <= 8.5d+162))) then
tmp = y * z
else
tmp = t_0
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double t_0 = x * -z;
double tmp;
if (z <= -2.25e+266) {
tmp = t_0;
} else if (z <= -1.15e+178) {
tmp = y * z;
} else if (z <= -3.4e+96) {
tmp = t_0;
} else if (z <= -7e-97) {
tmp = y * z;
} else if (z <= 1e-118) {
tmp = x;
} else if ((z <= 6.2e+24) || !(z <= 8.5e+162)) {
tmp = y * z;
} else {
tmp = t_0;
}
return tmp;
}
def code(x, y, z): t_0 = x * -z tmp = 0 if z <= -2.25e+266: tmp = t_0 elif z <= -1.15e+178: tmp = y * z elif z <= -3.4e+96: tmp = t_0 elif z <= -7e-97: tmp = y * z elif z <= 1e-118: tmp = x elif (z <= 6.2e+24) or not (z <= 8.5e+162): tmp = y * z else: tmp = t_0 return tmp
function code(x, y, z) t_0 = Float64(x * Float64(-z)) tmp = 0.0 if (z <= -2.25e+266) tmp = t_0; elseif (z <= -1.15e+178) tmp = Float64(y * z); elseif (z <= -3.4e+96) tmp = t_0; elseif (z <= -7e-97) tmp = Float64(y * z); elseif (z <= 1e-118) tmp = x; elseif ((z <= 6.2e+24) || !(z <= 8.5e+162)) tmp = Float64(y * z); else tmp = t_0; end return tmp end
function tmp_2 = code(x, y, z) t_0 = x * -z; tmp = 0.0; if (z <= -2.25e+266) tmp = t_0; elseif (z <= -1.15e+178) tmp = y * z; elseif (z <= -3.4e+96) tmp = t_0; elseif (z <= -7e-97) tmp = y * z; elseif (z <= 1e-118) tmp = x; elseif ((z <= 6.2e+24) || ~((z <= 8.5e+162))) tmp = y * z; else tmp = t_0; end tmp_2 = tmp; end
code[x_, y_, z_] := Block[{t$95$0 = N[(x * (-z)), $MachinePrecision]}, If[LessEqual[z, -2.25e+266], t$95$0, If[LessEqual[z, -1.15e+178], N[(y * z), $MachinePrecision], If[LessEqual[z, -3.4e+96], t$95$0, If[LessEqual[z, -7e-97], N[(y * z), $MachinePrecision], If[LessEqual[z, 1e-118], x, If[Or[LessEqual[z, 6.2e+24], N[Not[LessEqual[z, 8.5e+162]], $MachinePrecision]], N[(y * z), $MachinePrecision], t$95$0]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := x \cdot \left(-z\right)\\
\mathbf{if}\;z \leq -2.25 \cdot 10^{+266}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;z \leq -1.15 \cdot 10^{+178}:\\
\;\;\;\;y \cdot z\\
\mathbf{elif}\;z \leq -3.4 \cdot 10^{+96}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;z \leq -7 \cdot 10^{-97}:\\
\;\;\;\;y \cdot z\\
\mathbf{elif}\;z \leq 10^{-118}:\\
\;\;\;\;x\\
\mathbf{elif}\;z \leq 6.2 \cdot 10^{+24} \lor \neg \left(z \leq 8.5 \cdot 10^{+162}\right):\\
\;\;\;\;y \cdot z\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if z < -2.25e266 or -1.15e178 < z < -3.4000000000000001e96 or 6.20000000000000022e24 < z < 8.5000000000000003e162Initial program 100.0%
Taylor expanded in x around inf 74.3%
mul-1-neg74.3%
unsub-neg74.3%
Simplified74.3%
Taylor expanded in z around inf 74.3%
mul-1-neg74.3%
distribute-rgt-neg-out74.3%
Simplified74.3%
if -2.25e266 < z < -1.15e178 or -3.4000000000000001e96 < z < -7.00000000000000038e-97 or 9.99999999999999985e-119 < z < 6.20000000000000022e24 or 8.5000000000000003e162 < z Initial program 100.0%
Taylor expanded in x around 0 60.2%
if -7.00000000000000038e-97 < z < 9.99999999999999985e-119Initial program 100.0%
Taylor expanded in z around 0 79.9%
Final simplification69.6%
(FPCore (x y z)
:precision binary64
(if (or (<= y -1.18e+98)
(and (not (<= y 0.205)) (or (<= y 6e+51) (not (<= y 8.2e+95)))))
(* y z)
(* x (- 1.0 z))))
double code(double x, double y, double z) {
double tmp;
if ((y <= -1.18e+98) || (!(y <= 0.205) && ((y <= 6e+51) || !(y <= 8.2e+95)))) {
tmp = y * z;
} else {
tmp = x * (1.0 - z);
}
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.18d+98)) .or. (.not. (y <= 0.205d0)) .and. (y <= 6d+51) .or. (.not. (y <= 8.2d+95))) then
tmp = y * z
else
tmp = x * (1.0d0 - z)
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double tmp;
if ((y <= -1.18e+98) || (!(y <= 0.205) && ((y <= 6e+51) || !(y <= 8.2e+95)))) {
tmp = y * z;
} else {
tmp = x * (1.0 - z);
}
return tmp;
}
def code(x, y, z): tmp = 0 if (y <= -1.18e+98) or (not (y <= 0.205) and ((y <= 6e+51) or not (y <= 8.2e+95))): tmp = y * z else: tmp = x * (1.0 - z) return tmp
function code(x, y, z) tmp = 0.0 if ((y <= -1.18e+98) || (!(y <= 0.205) && ((y <= 6e+51) || !(y <= 8.2e+95)))) tmp = Float64(y * z); else tmp = Float64(x * Float64(1.0 - z)); end return tmp end
function tmp_2 = code(x, y, z) tmp = 0.0; if ((y <= -1.18e+98) || (~((y <= 0.205)) && ((y <= 6e+51) || ~((y <= 8.2e+95))))) tmp = y * z; else tmp = x * (1.0 - z); end tmp_2 = tmp; end
code[x_, y_, z_] := If[Or[LessEqual[y, -1.18e+98], And[N[Not[LessEqual[y, 0.205]], $MachinePrecision], Or[LessEqual[y, 6e+51], N[Not[LessEqual[y, 8.2e+95]], $MachinePrecision]]]], N[(y * z), $MachinePrecision], N[(x * N[(1.0 - z), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;y \leq -1.18 \cdot 10^{+98} \lor \neg \left(y \leq 0.205\right) \land \left(y \leq 6 \cdot 10^{+51} \lor \neg \left(y \leq 8.2 \cdot 10^{+95}\right)\right):\\
\;\;\;\;y \cdot z\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(1 - z\right)\\
\end{array}
\end{array}
if y < -1.18000000000000002e98 or 0.204999999999999988 < y < 6e51 or 8.19999999999999972e95 < y Initial program 100.0%
Taylor expanded in x around 0 76.1%
if -1.18000000000000002e98 < y < 0.204999999999999988 or 6e51 < y < 8.19999999999999972e95Initial program 100.0%
Taylor expanded in x around inf 82.0%
mul-1-neg82.0%
unsub-neg82.0%
Simplified82.0%
Final simplification79.8%
(FPCore (x y z)
:precision binary64
(let* ((t_0 (* (- y x) z)))
(if (<= z -5.8e-97)
t_0
(if (<= z 1.96e-118)
(- x (* x z))
(if (<= z 1.8e-52)
(* y z)
(if (<= z 95000000.0) (* x (- 1.0 z)) t_0))))))
double code(double x, double y, double z) {
double t_0 = (y - x) * z;
double tmp;
if (z <= -5.8e-97) {
tmp = t_0;
} else if (z <= 1.96e-118) {
tmp = x - (x * z);
} else if (z <= 1.8e-52) {
tmp = y * z;
} else if (z <= 95000000.0) {
tmp = x * (1.0 - z);
} 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) :: tmp
t_0 = (y - x) * z
if (z <= (-5.8d-97)) then
tmp = t_0
else if (z <= 1.96d-118) then
tmp = x - (x * z)
else if (z <= 1.8d-52) then
tmp = y * z
else if (z <= 95000000.0d0) then
tmp = x * (1.0d0 - z)
else
tmp = t_0
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double t_0 = (y - x) * z;
double tmp;
if (z <= -5.8e-97) {
tmp = t_0;
} else if (z <= 1.96e-118) {
tmp = x - (x * z);
} else if (z <= 1.8e-52) {
tmp = y * z;
} else if (z <= 95000000.0) {
tmp = x * (1.0 - z);
} else {
tmp = t_0;
}
return tmp;
}
def code(x, y, z): t_0 = (y - x) * z tmp = 0 if z <= -5.8e-97: tmp = t_0 elif z <= 1.96e-118: tmp = x - (x * z) elif z <= 1.8e-52: tmp = y * z elif z <= 95000000.0: tmp = x * (1.0 - z) else: tmp = t_0 return tmp
function code(x, y, z) t_0 = Float64(Float64(y - x) * z) tmp = 0.0 if (z <= -5.8e-97) tmp = t_0; elseif (z <= 1.96e-118) tmp = Float64(x - Float64(x * z)); elseif (z <= 1.8e-52) tmp = Float64(y * z); elseif (z <= 95000000.0) tmp = Float64(x * Float64(1.0 - z)); else tmp = t_0; end return tmp end
function tmp_2 = code(x, y, z) t_0 = (y - x) * z; tmp = 0.0; if (z <= -5.8e-97) tmp = t_0; elseif (z <= 1.96e-118) tmp = x - (x * z); elseif (z <= 1.8e-52) tmp = y * z; elseif (z <= 95000000.0) tmp = x * (1.0 - z); else tmp = t_0; end tmp_2 = tmp; end
code[x_, y_, z_] := Block[{t$95$0 = N[(N[(y - x), $MachinePrecision] * z), $MachinePrecision]}, If[LessEqual[z, -5.8e-97], t$95$0, If[LessEqual[z, 1.96e-118], N[(x - N[(x * z), $MachinePrecision]), $MachinePrecision], If[LessEqual[z, 1.8e-52], N[(y * z), $MachinePrecision], If[LessEqual[z, 95000000.0], N[(x * N[(1.0 - z), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(y - x\right) \cdot z\\
\mathbf{if}\;z \leq -5.8 \cdot 10^{-97}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;z \leq 1.96 \cdot 10^{-118}:\\
\;\;\;\;x - x \cdot z\\
\mathbf{elif}\;z \leq 1.8 \cdot 10^{-52}:\\
\;\;\;\;y \cdot z\\
\mathbf{elif}\;z \leq 95000000:\\
\;\;\;\;x \cdot \left(1 - z\right)\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if z < -5.7999999999999999e-97 or 9.5e7 < z Initial program 100.0%
Taylor expanded in z around inf 94.0%
if -5.7999999999999999e-97 < z < 1.96e-118Initial program 100.0%
Taylor expanded in x around inf 79.9%
mul-1-neg79.9%
unsub-neg79.9%
Simplified79.9%
sub-neg79.9%
distribute-rgt-in79.9%
*-un-lft-identity79.9%
Applied egg-rr79.9%
if 1.96e-118 < z < 1.79999999999999994e-52Initial program 100.0%
Taylor expanded in x around 0 79.3%
if 1.79999999999999994e-52 < z < 9.5e7Initial program 99.8%
Taylor expanded in x around inf 64.2%
mul-1-neg64.2%
unsub-neg64.2%
Simplified64.2%
Final simplification86.9%
(FPCore (x y z)
:precision binary64
(let* ((t_0 (* (- y x) z)))
(if (<= z -7e-97)
t_0
(if (<= z 2e-118)
(- x (* x z))
(if (<= z 4.15e-53)
(* y z)
(if (<= z 440000000.0) (* x (- 1.0 z)) t_0))))))
double code(double x, double y, double z) {
double t_0 = (y - x) * z;
double tmp;
if (z <= -7e-97) {
tmp = t_0;
} else if (z <= 2e-118) {
tmp = x - (x * z);
} else if (z <= 4.15e-53) {
tmp = y * z;
} else if (z <= 440000000.0) {
tmp = x * (1.0 - z);
} 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) :: tmp
t_0 = (y - x) * z
if (z <= (-7d-97)) then
tmp = t_0
else if (z <= 2d-118) then
tmp = x - (x * z)
else if (z <= 4.15d-53) then
tmp = y * z
else if (z <= 440000000.0d0) then
tmp = x * (1.0d0 - z)
else
tmp = t_0
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double t_0 = (y - x) * z;
double tmp;
if (z <= -7e-97) {
tmp = t_0;
} else if (z <= 2e-118) {
tmp = x - (x * z);
} else if (z <= 4.15e-53) {
tmp = y * z;
} else if (z <= 440000000.0) {
tmp = x * (1.0 - z);
} else {
tmp = t_0;
}
return tmp;
}
def code(x, y, z): t_0 = (y - x) * z tmp = 0 if z <= -7e-97: tmp = t_0 elif z <= 2e-118: tmp = x - (x * z) elif z <= 4.15e-53: tmp = y * z elif z <= 440000000.0: tmp = x * (1.0 - z) else: tmp = t_0 return tmp
function code(x, y, z) t_0 = Float64(Float64(y - x) * z) tmp = 0.0 if (z <= -7e-97) tmp = t_0; elseif (z <= 2e-118) tmp = Float64(x - Float64(x * z)); elseif (z <= 4.15e-53) tmp = Float64(y * z); elseif (z <= 440000000.0) tmp = Float64(x * Float64(1.0 - z)); else tmp = t_0; end return tmp end
function tmp_2 = code(x, y, z) t_0 = (y - x) * z; tmp = 0.0; if (z <= -7e-97) tmp = t_0; elseif (z <= 2e-118) tmp = x - (x * z); elseif (z <= 4.15e-53) tmp = y * z; elseif (z <= 440000000.0) tmp = x * (1.0 - z); else tmp = t_0; end tmp_2 = tmp; end
code[x_, y_, z_] := Block[{t$95$0 = N[(N[(y - x), $MachinePrecision] * z), $MachinePrecision]}, If[LessEqual[z, -7e-97], t$95$0, If[LessEqual[z, 2e-118], N[(x - N[(x * z), $MachinePrecision]), $MachinePrecision], If[LessEqual[z, 4.15e-53], N[(y * z), $MachinePrecision], If[LessEqual[z, 440000000.0], N[(x * N[(1.0 - z), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(y - x\right) \cdot z\\
\mathbf{if}\;z \leq -7 \cdot 10^{-97}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;z \leq 2 \cdot 10^{-118}:\\
\;\;\;\;x - x \cdot z\\
\mathbf{elif}\;z \leq 4.15 \cdot 10^{-53}:\\
\;\;\;\;y \cdot z\\
\mathbf{elif}\;z \leq 440000000:\\
\;\;\;\;x \cdot \left(1 - z\right)\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if z < -7.00000000000000038e-97 or 4.4e8 < z Initial program 100.0%
Taylor expanded in z around inf 94.0%
if -7.00000000000000038e-97 < z < 1.99999999999999997e-118Initial program 100.0%
Taylor expanded in y around 0 79.9%
mul-1-neg79.9%
distribute-lft-neg-out79.9%
*-commutative79.9%
Simplified79.9%
if 1.99999999999999997e-118 < z < 4.1499999999999998e-53Initial program 100.0%
Taylor expanded in x around 0 79.3%
if 4.1499999999999998e-53 < z < 4.4e8Initial program 99.8%
Taylor expanded in x around inf 64.2%
mul-1-neg64.2%
unsub-neg64.2%
Simplified64.2%
Final simplification86.9%
(FPCore (x y z)
:precision binary64
(let* ((t_0 (* (- y x) z)))
(if (<= z -5.8e-97)
t_0
(if (<= z 1.95e-118)
(- x (* x z))
(if (<= z 3.9e-53)
(* y z)
(if (<= z 95000000.0) (* x (- 1.0 z)) t_0))))))
double code(double x, double y, double z) {
double t_0 = (y - x) * z;
double tmp;
if (z <= -5.8e-97) {
tmp = t_0;
} else if (z <= 1.95e-118) {
tmp = x - (x * z);
} else if (z <= 3.9e-53) {
tmp = y * z;
} else if (z <= 95000000.0) {
tmp = x * (1.0 - z);
} 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) :: tmp
t_0 = (y - x) * z
if (z <= (-5.8d-97)) then
tmp = t_0
else if (z <= 1.95d-118) then
tmp = x - (x * z)
else if (z <= 3.9d-53) then
tmp = y * z
else if (z <= 95000000.0d0) then
tmp = x * (1.0d0 - z)
else
tmp = t_0
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double t_0 = (y - x) * z;
double tmp;
if (z <= -5.8e-97) {
tmp = t_0;
} else if (z <= 1.95e-118) {
tmp = x - (x * z);
} else if (z <= 3.9e-53) {
tmp = y * z;
} else if (z <= 95000000.0) {
tmp = x * (1.0 - z);
} else {
tmp = t_0;
}
return tmp;
}
def code(x, y, z): t_0 = (y - x) * z tmp = 0 if z <= -5.8e-97: tmp = t_0 elif z <= 1.95e-118: tmp = x - (x * z) elif z <= 3.9e-53: tmp = y * z elif z <= 95000000.0: tmp = x * (1.0 - z) else: tmp = t_0 return tmp
function code(x, y, z) t_0 = Float64(Float64(y - x) * z) tmp = 0.0 if (z <= -5.8e-97) tmp = t_0; elseif (z <= 1.95e-118) tmp = Float64(x - Float64(x * z)); elseif (z <= 3.9e-53) tmp = Float64(y * z); elseif (z <= 95000000.0) tmp = Float64(x * Float64(1.0 - z)); else tmp = t_0; end return tmp end
function tmp_2 = code(x, y, z) t_0 = (y - x) * z; tmp = 0.0; if (z <= -5.8e-97) tmp = t_0; elseif (z <= 1.95e-118) tmp = x - (x * z); elseif (z <= 3.9e-53) tmp = y * z; elseif (z <= 95000000.0) tmp = x * (1.0 - z); else tmp = t_0; end tmp_2 = tmp; end
code[x_, y_, z_] := Block[{t$95$0 = N[(N[(y - x), $MachinePrecision] * z), $MachinePrecision]}, If[LessEqual[z, -5.8e-97], t$95$0, If[LessEqual[z, 1.95e-118], N[(x - N[(x * z), $MachinePrecision]), $MachinePrecision], If[LessEqual[z, 3.9e-53], N[(y * z), $MachinePrecision], If[LessEqual[z, 95000000.0], N[(x * N[(1.0 - z), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(y - x\right) \cdot z\\
\mathbf{if}\;z \leq -5.8 \cdot 10^{-97}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;z \leq 1.95 \cdot 10^{-118}:\\
\;\;\;\;x - x \cdot z\\
\mathbf{elif}\;z \leq 3.9 \cdot 10^{-53}:\\
\;\;\;\;y \cdot z\\
\mathbf{elif}\;z \leq 95000000:\\
\;\;\;\;x \cdot \left(1 - z\right)\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if z < -5.7999999999999999e-97 or 9.5e7 < z Initial program 100.0%
Taylor expanded in z around inf 94.0%
if -5.7999999999999999e-97 < z < 1.95e-118Initial program 100.0%
Taylor expanded in x around inf 79.9%
mul-1-neg79.9%
unsub-neg79.9%
Simplified79.9%
sub-neg79.9%
distribute-rgt-in79.9%
*-un-lft-identity79.9%
Applied egg-rr79.9%
distribute-lft-neg-out79.9%
unsub-neg79.9%
*-commutative79.9%
Applied egg-rr79.9%
if 1.95e-118 < z < 3.9000000000000002e-53Initial program 100.0%
Taylor expanded in x around 0 79.3%
if 3.9000000000000002e-53 < z < 9.5e7Initial program 99.8%
Taylor expanded in x around inf 64.2%
mul-1-neg64.2%
unsub-neg64.2%
Simplified64.2%
Final simplification86.9%
(FPCore (x y z)
:precision binary64
(let* ((t_0 (* (- y x) z)) (t_1 (* x (- 1.0 z))))
(if (<= z -5.8e-97)
t_0
(if (<= z 2e-118)
t_1
(if (<= z 6.4e-53) (* y z) (if (<= z 95000000.0) t_1 t_0))))))
double code(double x, double y, double z) {
double t_0 = (y - x) * z;
double t_1 = x * (1.0 - z);
double tmp;
if (z <= -5.8e-97) {
tmp = t_0;
} else if (z <= 2e-118) {
tmp = t_1;
} else if (z <= 6.4e-53) {
tmp = y * z;
} else if (z <= 95000000.0) {
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 = (y - x) * z
t_1 = x * (1.0d0 - z)
if (z <= (-5.8d-97)) then
tmp = t_0
else if (z <= 2d-118) then
tmp = t_1
else if (z <= 6.4d-53) then
tmp = y * z
else if (z <= 95000000.0d0) 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 = (y - x) * z;
double t_1 = x * (1.0 - z);
double tmp;
if (z <= -5.8e-97) {
tmp = t_0;
} else if (z <= 2e-118) {
tmp = t_1;
} else if (z <= 6.4e-53) {
tmp = y * z;
} else if (z <= 95000000.0) {
tmp = t_1;
} else {
tmp = t_0;
}
return tmp;
}
def code(x, y, z): t_0 = (y - x) * z t_1 = x * (1.0 - z) tmp = 0 if z <= -5.8e-97: tmp = t_0 elif z <= 2e-118: tmp = t_1 elif z <= 6.4e-53: tmp = y * z elif z <= 95000000.0: tmp = t_1 else: tmp = t_0 return tmp
function code(x, y, z) t_0 = Float64(Float64(y - x) * z) t_1 = Float64(x * Float64(1.0 - z)) tmp = 0.0 if (z <= -5.8e-97) tmp = t_0; elseif (z <= 2e-118) tmp = t_1; elseif (z <= 6.4e-53) tmp = Float64(y * z); elseif (z <= 95000000.0) tmp = t_1; else tmp = t_0; end return tmp end
function tmp_2 = code(x, y, z) t_0 = (y - x) * z; t_1 = x * (1.0 - z); tmp = 0.0; if (z <= -5.8e-97) tmp = t_0; elseif (z <= 2e-118) tmp = t_1; elseif (z <= 6.4e-53) tmp = y * z; elseif (z <= 95000000.0) tmp = t_1; else tmp = t_0; end tmp_2 = tmp; end
code[x_, y_, z_] := Block[{t$95$0 = N[(N[(y - x), $MachinePrecision] * z), $MachinePrecision]}, Block[{t$95$1 = N[(x * N[(1.0 - z), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[z, -5.8e-97], t$95$0, If[LessEqual[z, 2e-118], t$95$1, If[LessEqual[z, 6.4e-53], N[(y * z), $MachinePrecision], If[LessEqual[z, 95000000.0], t$95$1, t$95$0]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(y - x\right) \cdot z\\
t_1 := x \cdot \left(1 - z\right)\\
\mathbf{if}\;z \leq -5.8 \cdot 10^{-97}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;z \leq 2 \cdot 10^{-118}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;z \leq 6.4 \cdot 10^{-53}:\\
\;\;\;\;y \cdot z\\
\mathbf{elif}\;z \leq 95000000:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if z < -5.7999999999999999e-97 or 9.5e7 < z Initial program 100.0%
Taylor expanded in z around inf 94.0%
if -5.7999999999999999e-97 < z < 1.99999999999999997e-118 or 6.4000000000000002e-53 < z < 9.5e7Initial program 100.0%
Taylor expanded in x around inf 77.3%
mul-1-neg77.3%
unsub-neg77.3%
Simplified77.3%
if 1.99999999999999997e-118 < z < 6.4000000000000002e-53Initial program 100.0%
Taylor expanded in x around 0 79.3%
Final simplification86.9%
(FPCore (x y z) :precision binary64 (if (or (<= z -7e-97) (not (<= z 1.95e-118))) (* y z) x))
double code(double x, double y, double z) {
double tmp;
if ((z <= -7e-97) || !(z <= 1.95e-118)) {
tmp = y * z;
} else {
tmp = x;
}
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 <= (-7d-97)) .or. (.not. (z <= 1.95d-118))) then
tmp = y * z
else
tmp = x
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double tmp;
if ((z <= -7e-97) || !(z <= 1.95e-118)) {
tmp = y * z;
} else {
tmp = x;
}
return tmp;
}
def code(x, y, z): tmp = 0 if (z <= -7e-97) or not (z <= 1.95e-118): tmp = y * z else: tmp = x return tmp
function code(x, y, z) tmp = 0.0 if ((z <= -7e-97) || !(z <= 1.95e-118)) tmp = Float64(y * z); else tmp = x; end return tmp end
function tmp_2 = code(x, y, z) tmp = 0.0; if ((z <= -7e-97) || ~((z <= 1.95e-118))) tmp = y * z; else tmp = x; end tmp_2 = tmp; end
code[x_, y_, z_] := If[Or[LessEqual[z, -7e-97], N[Not[LessEqual[z, 1.95e-118]], $MachinePrecision]], N[(y * z), $MachinePrecision], x]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;z \leq -7 \cdot 10^{-97} \lor \neg \left(z \leq 1.95 \cdot 10^{-118}\right):\\
\;\;\;\;y \cdot z\\
\mathbf{else}:\\
\;\;\;\;x\\
\end{array}
\end{array}
if z < -7.00000000000000038e-97 or 1.95e-118 < z Initial program 100.0%
Taylor expanded in x around 0 49.7%
if -7.00000000000000038e-97 < z < 1.95e-118Initial program 100.0%
Taylor expanded in z around 0 79.9%
Final simplification59.1%
(FPCore (x y z) :precision binary64 (+ x (* (- y x) z)))
double code(double x, double y, double z) {
return x + ((y - x) * z);
}
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 - x) * z)
end function
public static double code(double x, double y, double z) {
return x + ((y - x) * z);
}
def code(x, y, z): return x + ((y - x) * z)
function code(x, y, z) return Float64(x + Float64(Float64(y - x) * z)) end
function tmp = code(x, y, z) tmp = x + ((y - x) * z); end
code[x_, y_, z_] := N[(x + N[(N[(y - x), $MachinePrecision] * z), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
x + \left(y - x\right) \cdot z
\end{array}
Initial program 100.0%
(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 100.0%
Taylor expanded in z around 0 33.3%
herbie shell --seed 2024103
(FPCore (x y z)
:name "Diagrams.ThreeD.Shapes:frustum from diagrams-lib-1.3.0.3, B"
:precision binary64
(+ x (* (- y x) z)))