
(FPCore (x y z t) :precision binary64 (+ x (/ (* y (- z x)) t)))
double code(double x, double y, double z, double t) {
return x + ((y * (z - x)) / t);
}
real(8) function code(x, y, z, t)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
code = x + ((y * (z - x)) / t)
end function
public static double code(double x, double y, double z, double t) {
return x + ((y * (z - x)) / t);
}
def code(x, y, z, t): return x + ((y * (z - x)) / t)
function code(x, y, z, t) return Float64(x + Float64(Float64(y * Float64(z - x)) / t)) end
function tmp = code(x, y, z, t) tmp = x + ((y * (z - x)) / t); end
code[x_, y_, z_, t_] := N[(x + N[(N[(y * N[(z - x), $MachinePrecision]), $MachinePrecision] / t), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
x + \frac{y \cdot \left(z - x\right)}{t}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 11 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x y z t) :precision binary64 (+ x (/ (* y (- z x)) t)))
double code(double x, double y, double z, double t) {
return x + ((y * (z - x)) / t);
}
real(8) function code(x, y, z, t)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
code = x + ((y * (z - x)) / t)
end function
public static double code(double x, double y, double z, double t) {
return x + ((y * (z - x)) / t);
}
def code(x, y, z, t): return x + ((y * (z - x)) / t)
function code(x, y, z, t) return Float64(x + Float64(Float64(y * Float64(z - x)) / t)) end
function tmp = code(x, y, z, t) tmp = x + ((y * (z - x)) / t); end
code[x_, y_, z_, t_] := N[(x + N[(N[(y * N[(z - x), $MachinePrecision]), $MachinePrecision] / t), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
x + \frac{y \cdot \left(z - x\right)}{t}
\end{array}
(FPCore (x y z t) :precision binary64 (fma (/ y t) (- z x) x))
double code(double x, double y, double z, double t) {
return fma((y / t), (z - x), x);
}
function code(x, y, z, t) return fma(Float64(y / t), Float64(z - x), x) end
code[x_, y_, z_, t_] := N[(N[(y / t), $MachinePrecision] * N[(z - x), $MachinePrecision] + x), $MachinePrecision]
\begin{array}{l}
\\
\mathsf{fma}\left(\frac{y}{t}, z - x, x\right)
\end{array}
Initial program 90.7%
lift-+.f64N/A
+-commutativeN/A
lift-/.f64N/A
lift-*.f64N/A
*-commutativeN/A
associate-/l*N/A
*-commutativeN/A
lower-fma.f64N/A
lower-/.f6497.0
Applied rewrites97.0%
(FPCore (x y z t)
:precision binary64
(let* ((t_1 (+ (/ (* (- z x) y) t) x)) (t_2 (* (- z x) (/ y t))))
(if (<= t_1 -5e+279)
t_2
(if (<= t_1 -2e+17)
(- x (/ (* x y) t))
(if (<= t_1 4e+194) (fma (/ z t) y x) t_2)))))
double code(double x, double y, double z, double t) {
double t_1 = (((z - x) * y) / t) + x;
double t_2 = (z - x) * (y / t);
double tmp;
if (t_1 <= -5e+279) {
tmp = t_2;
} else if (t_1 <= -2e+17) {
tmp = x - ((x * y) / t);
} else if (t_1 <= 4e+194) {
tmp = fma((z / t), y, x);
} else {
tmp = t_2;
}
return tmp;
}
function code(x, y, z, t) t_1 = Float64(Float64(Float64(Float64(z - x) * y) / t) + x) t_2 = Float64(Float64(z - x) * Float64(y / t)) tmp = 0.0 if (t_1 <= -5e+279) tmp = t_2; elseif (t_1 <= -2e+17) tmp = Float64(x - Float64(Float64(x * y) / t)); elseif (t_1 <= 4e+194) tmp = fma(Float64(z / t), y, x); else tmp = t_2; end return tmp end
code[x_, y_, z_, t_] := Block[{t$95$1 = N[(N[(N[(N[(z - x), $MachinePrecision] * y), $MachinePrecision] / t), $MachinePrecision] + x), $MachinePrecision]}, Block[{t$95$2 = N[(N[(z - x), $MachinePrecision] * N[(y / t), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -5e+279], t$95$2, If[LessEqual[t$95$1, -2e+17], N[(x - N[(N[(x * y), $MachinePrecision] / t), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 4e+194], N[(N[(z / t), $MachinePrecision] * y + x), $MachinePrecision], t$95$2]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \frac{\left(z - x\right) \cdot y}{t} + x\\
t_2 := \left(z - x\right) \cdot \frac{y}{t}\\
\mathbf{if}\;t\_1 \leq -5 \cdot 10^{+279}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;t\_1 \leq -2 \cdot 10^{+17}:\\
\;\;\;\;x - \frac{x \cdot y}{t}\\
\mathbf{elif}\;t\_1 \leq 4 \cdot 10^{+194}:\\
\;\;\;\;\mathsf{fma}\left(\frac{z}{t}, y, x\right)\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if (+.f64 x (/.f64 (*.f64 y (-.f64 z x)) t)) < -5.0000000000000002e279 or 3.99999999999999978e194 < (+.f64 x (/.f64 (*.f64 y (-.f64 z x)) t)) Initial program 80.9%
Taylor expanded in t around 0
lower-/.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower--.f6471.9
Applied rewrites71.9%
Applied rewrites82.4%
if -5.0000000000000002e279 < (+.f64 x (/.f64 (*.f64 y (-.f64 z x)) t)) < -2e17Initial program 99.7%
Taylor expanded in z around 0
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-/.f64N/A
lower-*.f6478.1
Applied rewrites78.1%
if -2e17 < (+.f64 x (/.f64 (*.f64 y (-.f64 z x)) t)) < 3.99999999999999978e194Initial program 97.8%
lift-+.f64N/A
+-commutativeN/A
lift-/.f64N/A
lift-*.f64N/A
associate-/l*N/A
*-commutativeN/A
lower-fma.f64N/A
lower-/.f6496.2
Applied rewrites96.2%
Taylor expanded in z around inf
lower-/.f6488.1
Applied rewrites88.1%
Final simplification83.6%
(FPCore (x y z t)
:precision binary64
(let* ((t_1 (fma (/ y t) (- x) x)))
(if (<= x -2e+54)
t_1
(if (<= x -2.3e-181)
(* (- z x) (/ y t))
(if (<= x 4.8e+66) (+ (/ (* z y) t) x) t_1)))))
double code(double x, double y, double z, double t) {
double t_1 = fma((y / t), -x, x);
double tmp;
if (x <= -2e+54) {
tmp = t_1;
} else if (x <= -2.3e-181) {
tmp = (z - x) * (y / t);
} else if (x <= 4.8e+66) {
tmp = ((z * y) / t) + x;
} else {
tmp = t_1;
}
return tmp;
}
function code(x, y, z, t) t_1 = fma(Float64(y / t), Float64(-x), x) tmp = 0.0 if (x <= -2e+54) tmp = t_1; elseif (x <= -2.3e-181) tmp = Float64(Float64(z - x) * Float64(y / t)); elseif (x <= 4.8e+66) tmp = Float64(Float64(Float64(z * y) / t) + x); else tmp = t_1; end return tmp end
code[x_, y_, z_, t_] := Block[{t$95$1 = N[(N[(y / t), $MachinePrecision] * (-x) + x), $MachinePrecision]}, If[LessEqual[x, -2e+54], t$95$1, If[LessEqual[x, -2.3e-181], N[(N[(z - x), $MachinePrecision] * N[(y / t), $MachinePrecision]), $MachinePrecision], If[LessEqual[x, 4.8e+66], N[(N[(N[(z * y), $MachinePrecision] / t), $MachinePrecision] + x), $MachinePrecision], t$95$1]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \mathsf{fma}\left(\frac{y}{t}, -x, x\right)\\
\mathbf{if}\;x \leq -2 \cdot 10^{+54}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;x \leq -2.3 \cdot 10^{-181}:\\
\;\;\;\;\left(z - x\right) \cdot \frac{y}{t}\\
\mathbf{elif}\;x \leq 4.8 \cdot 10^{+66}:\\
\;\;\;\;\frac{z \cdot y}{t} + x\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if x < -2.0000000000000002e54 or 4.8000000000000003e66 < x Initial program 85.1%
lift-+.f64N/A
+-commutativeN/A
lift-/.f64N/A
lift-*.f64N/A
*-commutativeN/A
associate-/l*N/A
*-commutativeN/A
lower-fma.f64N/A
lower-/.f6499.9
Applied rewrites99.9%
Taylor expanded in z around 0
mul-1-negN/A
lower-neg.f6492.3
Applied rewrites92.3%
if -2.0000000000000002e54 < x < -2.29999999999999991e-181Initial program 89.3%
Taylor expanded in t around 0
lower-/.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower--.f6470.1
Applied rewrites70.1%
Applied rewrites78.6%
if -2.29999999999999991e-181 < x < 4.8000000000000003e66Initial program 97.8%
Taylor expanded in z around inf
*-commutativeN/A
lower-*.f6489.0
Applied rewrites89.0%
Final simplification88.6%
(FPCore (x y z t)
:precision binary64
(let* ((t_1 (fma (/ z t) y x)))
(if (<= t -7.2e-75)
t_1
(if (<= t 2.95e+23)
(/ (* (- z x) y) t)
(if (<= t 3.2e+100) (- x (/ (* x y) t)) t_1)))))
double code(double x, double y, double z, double t) {
double t_1 = fma((z / t), y, x);
double tmp;
if (t <= -7.2e-75) {
tmp = t_1;
} else if (t <= 2.95e+23) {
tmp = ((z - x) * y) / t;
} else if (t <= 3.2e+100) {
tmp = x - ((x * y) / t);
} else {
tmp = t_1;
}
return tmp;
}
function code(x, y, z, t) t_1 = fma(Float64(z / t), y, x) tmp = 0.0 if (t <= -7.2e-75) tmp = t_1; elseif (t <= 2.95e+23) tmp = Float64(Float64(Float64(z - x) * y) / t); elseif (t <= 3.2e+100) tmp = Float64(x - Float64(Float64(x * y) / t)); else tmp = t_1; end return tmp end
code[x_, y_, z_, t_] := Block[{t$95$1 = N[(N[(z / t), $MachinePrecision] * y + x), $MachinePrecision]}, If[LessEqual[t, -7.2e-75], t$95$1, If[LessEqual[t, 2.95e+23], N[(N[(N[(z - x), $MachinePrecision] * y), $MachinePrecision] / t), $MachinePrecision], If[LessEqual[t, 3.2e+100], N[(x - N[(N[(x * y), $MachinePrecision] / t), $MachinePrecision]), $MachinePrecision], t$95$1]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \mathsf{fma}\left(\frac{z}{t}, y, x\right)\\
\mathbf{if}\;t \leq -7.2 \cdot 10^{-75}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t \leq 2.95 \cdot 10^{+23}:\\
\;\;\;\;\frac{\left(z - x\right) \cdot y}{t}\\
\mathbf{elif}\;t \leq 3.2 \cdot 10^{+100}:\\
\;\;\;\;x - \frac{x \cdot y}{t}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if t < -7.2000000000000001e-75 or 3.1999999999999999e100 < t Initial program 84.5%
lift-+.f64N/A
+-commutativeN/A
lift-/.f64N/A
lift-*.f64N/A
associate-/l*N/A
*-commutativeN/A
lower-fma.f64N/A
lower-/.f6496.5
Applied rewrites96.5%
Taylor expanded in z around inf
lower-/.f6483.4
Applied rewrites83.4%
if -7.2000000000000001e-75 < t < 2.94999999999999994e23Initial program 98.0%
Taylor expanded in t around 0
lower-/.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower--.f6486.4
Applied rewrites86.4%
if 2.94999999999999994e23 < t < 3.1999999999999999e100Initial program 91.9%
Taylor expanded in z around 0
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-/.f64N/A
lower-*.f6483.4
Applied rewrites83.4%
(FPCore (x y z t) :precision binary64 (let* ((t_1 (* (- z x) (/ y t)))) (if (<= y -3.1e+72) t_1 (if (<= y 5.9e+110) (+ (/ (* z y) t) x) t_1))))
double code(double x, double y, double z, double t) {
double t_1 = (z - x) * (y / t);
double tmp;
if (y <= -3.1e+72) {
tmp = t_1;
} else if (y <= 5.9e+110) {
tmp = ((z * y) / t) + x;
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(x, y, z, t)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
real(8) :: t_1
real(8) :: tmp
t_1 = (z - x) * (y / t)
if (y <= (-3.1d+72)) then
tmp = t_1
else if (y <= 5.9d+110) then
tmp = ((z * y) / t) + x
else
tmp = t_1
end if
code = tmp
end function
public static double code(double x, double y, double z, double t) {
double t_1 = (z - x) * (y / t);
double tmp;
if (y <= -3.1e+72) {
tmp = t_1;
} else if (y <= 5.9e+110) {
tmp = ((z * y) / t) + x;
} else {
tmp = t_1;
}
return tmp;
}
def code(x, y, z, t): t_1 = (z - x) * (y / t) tmp = 0 if y <= -3.1e+72: tmp = t_1 elif y <= 5.9e+110: tmp = ((z * y) / t) + x else: tmp = t_1 return tmp
function code(x, y, z, t) t_1 = Float64(Float64(z - x) * Float64(y / t)) tmp = 0.0 if (y <= -3.1e+72) tmp = t_1; elseif (y <= 5.9e+110) tmp = Float64(Float64(Float64(z * y) / t) + x); else tmp = t_1; end return tmp end
function tmp_2 = code(x, y, z, t) t_1 = (z - x) * (y / t); tmp = 0.0; if (y <= -3.1e+72) tmp = t_1; elseif (y <= 5.9e+110) tmp = ((z * y) / t) + x; else tmp = t_1; end tmp_2 = tmp; end
code[x_, y_, z_, t_] := Block[{t$95$1 = N[(N[(z - x), $MachinePrecision] * N[(y / t), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[y, -3.1e+72], t$95$1, If[LessEqual[y, 5.9e+110], N[(N[(N[(z * y), $MachinePrecision] / t), $MachinePrecision] + x), $MachinePrecision], t$95$1]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \left(z - x\right) \cdot \frac{y}{t}\\
\mathbf{if}\;y \leq -3.1 \cdot 10^{+72}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;y \leq 5.9 \cdot 10^{+110}:\\
\;\;\;\;\frac{z \cdot y}{t} + x\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if y < -3.09999999999999988e72 or 5.8999999999999997e110 < y Initial program 80.6%
Taylor expanded in t around 0
lower-/.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower--.f6475.7
Applied rewrites75.7%
Applied rewrites84.3%
if -3.09999999999999988e72 < y < 5.8999999999999997e110Initial program 96.9%
Taylor expanded in z around inf
*-commutativeN/A
lower-*.f6483.7
Applied rewrites83.7%
Final simplification83.9%
(FPCore (x y z t) :precision binary64 (let* ((t_1 (fma (/ z t) y x))) (if (<= t -7.2e-75) t_1 (if (<= t 6.5e-20) (* (- z x) (/ y t)) t_1))))
double code(double x, double y, double z, double t) {
double t_1 = fma((z / t), y, x);
double tmp;
if (t <= -7.2e-75) {
tmp = t_1;
} else if (t <= 6.5e-20) {
tmp = (z - x) * (y / t);
} else {
tmp = t_1;
}
return tmp;
}
function code(x, y, z, t) t_1 = fma(Float64(z / t), y, x) tmp = 0.0 if (t <= -7.2e-75) tmp = t_1; elseif (t <= 6.5e-20) tmp = Float64(Float64(z - x) * Float64(y / t)); else tmp = t_1; end return tmp end
code[x_, y_, z_, t_] := Block[{t$95$1 = N[(N[(z / t), $MachinePrecision] * y + x), $MachinePrecision]}, If[LessEqual[t, -7.2e-75], t$95$1, If[LessEqual[t, 6.5e-20], N[(N[(z - x), $MachinePrecision] * N[(y / t), $MachinePrecision]), $MachinePrecision], t$95$1]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \mathsf{fma}\left(\frac{z}{t}, y, x\right)\\
\mathbf{if}\;t \leq -7.2 \cdot 10^{-75}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t \leq 6.5 \cdot 10^{-20}:\\
\;\;\;\;\left(z - x\right) \cdot \frac{y}{t}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if t < -7.2000000000000001e-75 or 6.50000000000000032e-20 < t Initial program 86.4%
lift-+.f64N/A
+-commutativeN/A
lift-/.f64N/A
lift-*.f64N/A
associate-/l*N/A
*-commutativeN/A
lower-fma.f64N/A
lower-/.f6497.1
Applied rewrites97.1%
Taylor expanded in z around inf
lower-/.f6479.8
Applied rewrites79.8%
if -7.2000000000000001e-75 < t < 6.50000000000000032e-20Initial program 97.8%
Taylor expanded in t around 0
lower-/.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower--.f6488.2
Applied rewrites88.2%
Applied rewrites85.3%
Final simplification81.8%
(FPCore (x y z t) :precision binary64 (let* ((t_1 (fma (/ z t) y x))) (if (<= t -3.6e-147) t_1 (if (<= t 1.3e-117) (* z (/ y t)) t_1))))
double code(double x, double y, double z, double t) {
double t_1 = fma((z / t), y, x);
double tmp;
if (t <= -3.6e-147) {
tmp = t_1;
} else if (t <= 1.3e-117) {
tmp = z * (y / t);
} else {
tmp = t_1;
}
return tmp;
}
function code(x, y, z, t) t_1 = fma(Float64(z / t), y, x) tmp = 0.0 if (t <= -3.6e-147) tmp = t_1; elseif (t <= 1.3e-117) tmp = Float64(z * Float64(y / t)); else tmp = t_1; end return tmp end
code[x_, y_, z_, t_] := Block[{t$95$1 = N[(N[(z / t), $MachinePrecision] * y + x), $MachinePrecision]}, If[LessEqual[t, -3.6e-147], t$95$1, If[LessEqual[t, 1.3e-117], N[(z * N[(y / t), $MachinePrecision]), $MachinePrecision], t$95$1]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \mathsf{fma}\left(\frac{z}{t}, y, x\right)\\
\mathbf{if}\;t \leq -3.6 \cdot 10^{-147}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t \leq 1.3 \cdot 10^{-117}:\\
\;\;\;\;z \cdot \frac{y}{t}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if t < -3.60000000000000012e-147 or 1.29999999999999992e-117 < t Initial program 88.5%
lift-+.f64N/A
+-commutativeN/A
lift-/.f64N/A
lift-*.f64N/A
associate-/l*N/A
*-commutativeN/A
lower-fma.f64N/A
lower-/.f6496.0
Applied rewrites96.0%
Taylor expanded in z around inf
lower-/.f6475.9
Applied rewrites75.9%
if -3.60000000000000012e-147 < t < 1.29999999999999992e-117Initial program 96.9%
lift-+.f64N/A
+-commutativeN/A
lift-/.f64N/A
lift-*.f64N/A
associate-/l*N/A
*-commutativeN/A
lower-fma.f64N/A
lower-/.f6474.6
Applied rewrites74.6%
Taylor expanded in z around inf
associate-*l/N/A
lower-*.f64N/A
lower-/.f6460.0
Applied rewrites60.0%
Final simplification71.8%
(FPCore (x y z t) :precision binary64 (if (<= y -6.8e+252) (* (/ (- x) t) y) (fma (/ z t) y x)))
double code(double x, double y, double z, double t) {
double tmp;
if (y <= -6.8e+252) {
tmp = (-x / t) * y;
} else {
tmp = fma((z / t), y, x);
}
return tmp;
}
function code(x, y, z, t) tmp = 0.0 if (y <= -6.8e+252) tmp = Float64(Float64(Float64(-x) / t) * y); else tmp = fma(Float64(z / t), y, x); end return tmp end
code[x_, y_, z_, t_] := If[LessEqual[y, -6.8e+252], N[(N[((-x) / t), $MachinePrecision] * y), $MachinePrecision], N[(N[(z / t), $MachinePrecision] * y + x), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;y \leq -6.8 \cdot 10^{+252}:\\
\;\;\;\;\frac{-x}{t} \cdot y\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{z}{t}, y, x\right)\\
\end{array}
\end{array}
if y < -6.8e252Initial program 69.0%
Taylor expanded in t around 0
lower-/.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower--.f6468.9
Applied rewrites68.9%
Taylor expanded in z around 0
Applied rewrites83.2%
if -6.8e252 < y Initial program 92.0%
lift-+.f64N/A
+-commutativeN/A
lift-/.f64N/A
lift-*.f64N/A
associate-/l*N/A
*-commutativeN/A
lower-fma.f64N/A
lower-/.f6490.1
Applied rewrites90.1%
Taylor expanded in z around inf
lower-/.f6470.3
Applied rewrites70.3%
(FPCore (x y z t) :precision binary64 (if (<= x -7.8e-23) (* (/ z t) y) (/ (* z y) t)))
double code(double x, double y, double z, double t) {
double tmp;
if (x <= -7.8e-23) {
tmp = (z / t) * y;
} else {
tmp = (z * y) / t;
}
return tmp;
}
real(8) function code(x, y, z, t)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
real(8) :: tmp
if (x <= (-7.8d-23)) then
tmp = (z / t) * y
else
tmp = (z * y) / t
end if
code = tmp
end function
public static double code(double x, double y, double z, double t) {
double tmp;
if (x <= -7.8e-23) {
tmp = (z / t) * y;
} else {
tmp = (z * y) / t;
}
return tmp;
}
def code(x, y, z, t): tmp = 0 if x <= -7.8e-23: tmp = (z / t) * y else: tmp = (z * y) / t return tmp
function code(x, y, z, t) tmp = 0.0 if (x <= -7.8e-23) tmp = Float64(Float64(z / t) * y); else tmp = Float64(Float64(z * y) / t); end return tmp end
function tmp_2 = code(x, y, z, t) tmp = 0.0; if (x <= -7.8e-23) tmp = (z / t) * y; else tmp = (z * y) / t; end tmp_2 = tmp; end
code[x_, y_, z_, t_] := If[LessEqual[x, -7.8e-23], N[(N[(z / t), $MachinePrecision] * y), $MachinePrecision], N[(N[(z * y), $MachinePrecision] / t), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;x \leq -7.8 \cdot 10^{-23}:\\
\;\;\;\;\frac{z}{t} \cdot y\\
\mathbf{else}:\\
\;\;\;\;\frac{z \cdot y}{t}\\
\end{array}
\end{array}
if x < -7.8e-23Initial program 83.9%
Taylor expanded in z around inf
lower-/.f64N/A
*-commutativeN/A
lower-*.f6412.6
Applied rewrites12.6%
Applied rewrites20.5%
if -7.8e-23 < x Initial program 93.2%
Taylor expanded in z around inf
lower-/.f64N/A
*-commutativeN/A
lower-*.f6443.3
Applied rewrites43.3%
Final simplification37.0%
(FPCore (x y z t) :precision binary64 (* z (/ y t)))
double code(double x, double y, double z, double t) {
return z * (y / t);
}
real(8) function code(x, y, z, t)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
code = z * (y / t)
end function
public static double code(double x, double y, double z, double t) {
return z * (y / t);
}
def code(x, y, z, t): return z * (y / t)
function code(x, y, z, t) return Float64(z * Float64(y / t)) end
function tmp = code(x, y, z, t) tmp = z * (y / t); end
code[x_, y_, z_, t_] := N[(z * N[(y / t), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
z \cdot \frac{y}{t}
\end{array}
Initial program 90.7%
lift-+.f64N/A
+-commutativeN/A
lift-/.f64N/A
lift-*.f64N/A
associate-/l*N/A
*-commutativeN/A
lower-fma.f64N/A
lower-/.f6490.5
Applied rewrites90.5%
Taylor expanded in z around inf
associate-*l/N/A
lower-*.f64N/A
lower-/.f6438.4
Applied rewrites38.4%
Final simplification38.4%
(FPCore (x y z t) :precision binary64 (* (/ z t) y))
double code(double x, double y, double z, double t) {
return (z / t) * y;
}
real(8) function code(x, y, z, t)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
code = (z / t) * y
end function
public static double code(double x, double y, double z, double t) {
return (z / t) * y;
}
def code(x, y, z, t): return (z / t) * y
function code(x, y, z, t) return Float64(Float64(z / t) * y) end
function tmp = code(x, y, z, t) tmp = (z / t) * y; end
code[x_, y_, z_, t_] := N[(N[(z / t), $MachinePrecision] * y), $MachinePrecision]
\begin{array}{l}
\\
\frac{z}{t} \cdot y
\end{array}
Initial program 90.7%
Taylor expanded in z around inf
lower-/.f64N/A
*-commutativeN/A
lower-*.f6434.8
Applied rewrites34.8%
Applied rewrites32.9%
Final simplification32.9%
(FPCore (x y z t) :precision binary64 (- x (+ (* x (/ y t)) (* (- z) (/ y t)))))
double code(double x, double y, double z, double t) {
return x - ((x * (y / t)) + (-z * (y / t)));
}
real(8) function code(x, y, z, t)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
code = x - ((x * (y / t)) + (-z * (y / t)))
end function
public static double code(double x, double y, double z, double t) {
return x - ((x * (y / t)) + (-z * (y / t)));
}
def code(x, y, z, t): return x - ((x * (y / t)) + (-z * (y / t)))
function code(x, y, z, t) return Float64(x - Float64(Float64(x * Float64(y / t)) + Float64(Float64(-z) * Float64(y / t)))) end
function tmp = code(x, y, z, t) tmp = x - ((x * (y / t)) + (-z * (y / t))); end
code[x_, y_, z_, t_] := N[(x - N[(N[(x * N[(y / t), $MachinePrecision]), $MachinePrecision] + N[((-z) * N[(y / t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
x - \left(x \cdot \frac{y}{t} + \left(-z\right) \cdot \frac{y}{t}\right)
\end{array}
herbie shell --seed 2024268
(FPCore (x y z t)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, D"
:precision binary64
:alt
(! :herbie-platform default (- x (+ (* x (/ y t)) (* (- z) (/ y t)))))
(+ x (/ (* y (- z x)) t)))