
(FPCore (x y z t) :precision binary64 (/ x (- y (* z t))))
double code(double x, double y, double z, double t) {
return x / (y - (z * 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 * t))
end function
public static double code(double x, double y, double z, double t) {
return x / (y - (z * t));
}
def code(x, y, z, t): return x / (y - (z * t))
function code(x, y, z, t) return Float64(x / Float64(y - Float64(z * t))) end
function tmp = code(x, y, z, t) tmp = x / (y - (z * t)); end
code[x_, y_, z_, t_] := N[(x / N[(y - N[(z * t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{x}{y - z \cdot t}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 8 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x y z t) :precision binary64 (/ x (- y (* z t))))
double code(double x, double y, double z, double t) {
return x / (y - (z * 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 * t))
end function
public static double code(double x, double y, double z, double t) {
return x / (y - (z * t));
}
def code(x, y, z, t): return x / (y - (z * t))
function code(x, y, z, t) return Float64(x / Float64(y - Float64(z * t))) end
function tmp = code(x, y, z, t) tmp = x / (y - (z * t)); end
code[x_, y_, z_, t_] := N[(x / N[(y - N[(z * t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{x}{y - z \cdot t}
\end{array}
NOTE: x, y, z, and t should be sorted in increasing order before calling this function. (FPCore (x y z t) :precision binary64 (if (<= (* z t) 2e+152) (/ x (fma z (- t) y)) (/ (/ (- x) t) z)))
assert(x < y && y < z && z < t);
double code(double x, double y, double z, double t) {
double tmp;
if ((z * t) <= 2e+152) {
tmp = x / fma(z, -t, y);
} else {
tmp = (-x / t) / z;
}
return tmp;
}
x, y, z, t = sort([x, y, z, t]) function code(x, y, z, t) tmp = 0.0 if (Float64(z * t) <= 2e+152) tmp = Float64(x / fma(z, Float64(-t), y)); else tmp = Float64(Float64(Float64(-x) / t) / z); end return tmp end
NOTE: x, y, z, and t should be sorted in increasing order before calling this function. code[x_, y_, z_, t_] := If[LessEqual[N[(z * t), $MachinePrecision], 2e+152], N[(x / N[(z * (-t) + y), $MachinePrecision]), $MachinePrecision], N[(N[((-x) / t), $MachinePrecision] / z), $MachinePrecision]]
\begin{array}{l}
[x, y, z, t] = \mathsf{sort}([x, y, z, t])\\
\\
\begin{array}{l}
\mathbf{if}\;z \cdot t \leq 2 \cdot 10^{+152}:\\
\;\;\;\;\frac{x}{\mathsf{fma}\left(z, -t, y\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{-x}{t}}{z}\\
\end{array}
\end{array}
if (*.f64 z t) < 2.0000000000000001e152Initial program 98.1%
cancel-sign-sub-inv98.1%
+-commutative98.1%
distribute-lft-neg-out98.1%
distribute-rgt-neg-out98.1%
fma-define98.1%
Simplified98.1%
if 2.0000000000000001e152 < (*.f64 z t) Initial program 85.0%
Taylor expanded in z around inf 85.0%
add-cube-cbrt84.8%
pow384.8%
Applied egg-rr84.8%
rem-cube-cbrt85.0%
*-commutative85.0%
associate-/r*99.9%
Applied egg-rr99.9%
Taylor expanded in y around 0 99.9%
neg-mul-199.9%
distribute-neg-frac299.9%
Simplified99.9%
Final simplification98.3%
NOTE: x, y, z, and t should be sorted in increasing order before calling this function. (FPCore (x y z t) :precision binary64 (if (or (<= (* z t) -2e+46) (not (<= (* z t) 5e-5))) (/ (/ x z) (- t)) (/ x y)))
assert(x < y && y < z && z < t);
double code(double x, double y, double z, double t) {
double tmp;
if (((z * t) <= -2e+46) || !((z * t) <= 5e-5)) {
tmp = (x / z) / -t;
} else {
tmp = x / y;
}
return tmp;
}
NOTE: x, y, z, and t should be sorted in increasing order before calling this function.
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 (((z * t) <= (-2d+46)) .or. (.not. ((z * t) <= 5d-5))) then
tmp = (x / z) / -t
else
tmp = x / y
end if
code = tmp
end function
assert x < y && y < z && z < t;
public static double code(double x, double y, double z, double t) {
double tmp;
if (((z * t) <= -2e+46) || !((z * t) <= 5e-5)) {
tmp = (x / z) / -t;
} else {
tmp = x / y;
}
return tmp;
}
[x, y, z, t] = sort([x, y, z, t]) def code(x, y, z, t): tmp = 0 if ((z * t) <= -2e+46) or not ((z * t) <= 5e-5): tmp = (x / z) / -t else: tmp = x / y return tmp
x, y, z, t = sort([x, y, z, t]) function code(x, y, z, t) tmp = 0.0 if ((Float64(z * t) <= -2e+46) || !(Float64(z * t) <= 5e-5)) tmp = Float64(Float64(x / z) / Float64(-t)); else tmp = Float64(x / y); end return tmp end
x, y, z, t = num2cell(sort([x, y, z, t])){:}
function tmp_2 = code(x, y, z, t)
tmp = 0.0;
if (((z * t) <= -2e+46) || ~(((z * t) <= 5e-5)))
tmp = (x / z) / -t;
else
tmp = x / y;
end
tmp_2 = tmp;
end
NOTE: x, y, z, and t should be sorted in increasing order before calling this function. code[x_, y_, z_, t_] := If[Or[LessEqual[N[(z * t), $MachinePrecision], -2e+46], N[Not[LessEqual[N[(z * t), $MachinePrecision], 5e-5]], $MachinePrecision]], N[(N[(x / z), $MachinePrecision] / (-t)), $MachinePrecision], N[(x / y), $MachinePrecision]]
\begin{array}{l}
[x, y, z, t] = \mathsf{sort}([x, y, z, t])\\
\\
\begin{array}{l}
\mathbf{if}\;z \cdot t \leq -2 \cdot 10^{+46} \lor \neg \left(z \cdot t \leq 5 \cdot 10^{-5}\right):\\
\;\;\;\;\frac{\frac{x}{z}}{-t}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{y}\\
\end{array}
\end{array}
if (*.f64 z t) < -2e46 or 5.00000000000000024e-5 < (*.f64 z t) Initial program 91.8%
Taylor expanded in t around inf 81.5%
distribute-lft-out81.5%
associate-*r/81.5%
mul-1-neg81.5%
associate-/l*83.3%
Simplified83.3%
Taylor expanded in z around inf 85.2%
if -2e46 < (*.f64 z t) < 5.00000000000000024e-5Initial program 99.9%
Taylor expanded in y around inf 78.9%
Final simplification81.6%
NOTE: x, y, z, and t should be sorted in increasing order before calling this function. (FPCore (x y z t) :precision binary64 (if (<= (* z t) -100000.0) (/ -1.0 (* z (/ t x))) (if (<= (* z t) 5e-5) (/ x y) (/ (/ x z) (- t)))))
assert(x < y && y < z && z < t);
double code(double x, double y, double z, double t) {
double tmp;
if ((z * t) <= -100000.0) {
tmp = -1.0 / (z * (t / x));
} else if ((z * t) <= 5e-5) {
tmp = x / y;
} else {
tmp = (x / z) / -t;
}
return tmp;
}
NOTE: x, y, z, and t should be sorted in increasing order before calling this function.
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 ((z * t) <= (-100000.0d0)) then
tmp = (-1.0d0) / (z * (t / x))
else if ((z * t) <= 5d-5) then
tmp = x / y
else
tmp = (x / z) / -t
end if
code = tmp
end function
assert x < y && y < z && z < t;
public static double code(double x, double y, double z, double t) {
double tmp;
if ((z * t) <= -100000.0) {
tmp = -1.0 / (z * (t / x));
} else if ((z * t) <= 5e-5) {
tmp = x / y;
} else {
tmp = (x / z) / -t;
}
return tmp;
}
[x, y, z, t] = sort([x, y, z, t]) def code(x, y, z, t): tmp = 0 if (z * t) <= -100000.0: tmp = -1.0 / (z * (t / x)) elif (z * t) <= 5e-5: tmp = x / y else: tmp = (x / z) / -t return tmp
x, y, z, t = sort([x, y, z, t]) function code(x, y, z, t) tmp = 0.0 if (Float64(z * t) <= -100000.0) tmp = Float64(-1.0 / Float64(z * Float64(t / x))); elseif (Float64(z * t) <= 5e-5) tmp = Float64(x / y); else tmp = Float64(Float64(x / z) / Float64(-t)); end return tmp end
x, y, z, t = num2cell(sort([x, y, z, t])){:}
function tmp_2 = code(x, y, z, t)
tmp = 0.0;
if ((z * t) <= -100000.0)
tmp = -1.0 / (z * (t / x));
elseif ((z * t) <= 5e-5)
tmp = x / y;
else
tmp = (x / z) / -t;
end
tmp_2 = tmp;
end
NOTE: x, y, z, and t should be sorted in increasing order before calling this function. code[x_, y_, z_, t_] := If[LessEqual[N[(z * t), $MachinePrecision], -100000.0], N[(-1.0 / N[(z * N[(t / x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[N[(z * t), $MachinePrecision], 5e-5], N[(x / y), $MachinePrecision], N[(N[(x / z), $MachinePrecision] / (-t)), $MachinePrecision]]]
\begin{array}{l}
[x, y, z, t] = \mathsf{sort}([x, y, z, t])\\
\\
\begin{array}{l}
\mathbf{if}\;z \cdot t \leq -100000:\\
\;\;\;\;\frac{-1}{z \cdot \frac{t}{x}}\\
\mathbf{elif}\;z \cdot t \leq 5 \cdot 10^{-5}:\\
\;\;\;\;\frac{x}{y}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{x}{z}}{-t}\\
\end{array}
\end{array}
if (*.f64 z t) < -1e5Initial program 93.7%
Taylor expanded in t around inf 71.0%
distribute-lft-out71.0%
associate-*r/71.0%
mul-1-neg71.0%
associate-/l*72.7%
Simplified72.7%
Taylor expanded in z around inf 75.3%
neg-mul-175.3%
clear-num75.4%
un-div-inv75.4%
div-inv76.8%
clear-num77.9%
Applied egg-rr77.9%
Taylor expanded in t around 0 77.0%
associate-*l/79.5%
*-commutative79.5%
Simplified79.5%
if -1e5 < (*.f64 z t) < 5.00000000000000024e-5Initial program 99.9%
Taylor expanded in y around inf 81.9%
if 5.00000000000000024e-5 < (*.f64 z t) Initial program 91.5%
Taylor expanded in t around inf 82.1%
distribute-lft-out82.1%
associate-*r/82.1%
mul-1-neg82.1%
associate-/l*83.8%
Simplified83.8%
Taylor expanded in z around inf 85.6%
Final simplification82.2%
NOTE: x, y, z, and t should be sorted in increasing order before calling this function. (FPCore (x y z t) :precision binary64 (if (<= (* z t) -100000.0) (/ (/ (- x) t) z) (if (<= (* z t) 5e-5) (/ x y) (/ (/ x z) (- t)))))
assert(x < y && y < z && z < t);
double code(double x, double y, double z, double t) {
double tmp;
if ((z * t) <= -100000.0) {
tmp = (-x / t) / z;
} else if ((z * t) <= 5e-5) {
tmp = x / y;
} else {
tmp = (x / z) / -t;
}
return tmp;
}
NOTE: x, y, z, and t should be sorted in increasing order before calling this function.
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 ((z * t) <= (-100000.0d0)) then
tmp = (-x / t) / z
else if ((z * t) <= 5d-5) then
tmp = x / y
else
tmp = (x / z) / -t
end if
code = tmp
end function
assert x < y && y < z && z < t;
public static double code(double x, double y, double z, double t) {
double tmp;
if ((z * t) <= -100000.0) {
tmp = (-x / t) / z;
} else if ((z * t) <= 5e-5) {
tmp = x / y;
} else {
tmp = (x / z) / -t;
}
return tmp;
}
[x, y, z, t] = sort([x, y, z, t]) def code(x, y, z, t): tmp = 0 if (z * t) <= -100000.0: tmp = (-x / t) / z elif (z * t) <= 5e-5: tmp = x / y else: tmp = (x / z) / -t return tmp
x, y, z, t = sort([x, y, z, t]) function code(x, y, z, t) tmp = 0.0 if (Float64(z * t) <= -100000.0) tmp = Float64(Float64(Float64(-x) / t) / z); elseif (Float64(z * t) <= 5e-5) tmp = Float64(x / y); else tmp = Float64(Float64(x / z) / Float64(-t)); end return tmp end
x, y, z, t = num2cell(sort([x, y, z, t])){:}
function tmp_2 = code(x, y, z, t)
tmp = 0.0;
if ((z * t) <= -100000.0)
tmp = (-x / t) / z;
elseif ((z * t) <= 5e-5)
tmp = x / y;
else
tmp = (x / z) / -t;
end
tmp_2 = tmp;
end
NOTE: x, y, z, and t should be sorted in increasing order before calling this function. code[x_, y_, z_, t_] := If[LessEqual[N[(z * t), $MachinePrecision], -100000.0], N[(N[((-x) / t), $MachinePrecision] / z), $MachinePrecision], If[LessEqual[N[(z * t), $MachinePrecision], 5e-5], N[(x / y), $MachinePrecision], N[(N[(x / z), $MachinePrecision] / (-t)), $MachinePrecision]]]
\begin{array}{l}
[x, y, z, t] = \mathsf{sort}([x, y, z, t])\\
\\
\begin{array}{l}
\mathbf{if}\;z \cdot t \leq -100000:\\
\;\;\;\;\frac{\frac{-x}{t}}{z}\\
\mathbf{elif}\;z \cdot t \leq 5 \cdot 10^{-5}:\\
\;\;\;\;\frac{x}{y}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{x}{z}}{-t}\\
\end{array}
\end{array}
if (*.f64 z t) < -1e5Initial program 93.7%
Taylor expanded in z around inf 90.5%
add-cube-cbrt89.6%
pow389.7%
Applied egg-rr89.7%
rem-cube-cbrt90.5%
*-commutative90.5%
associate-/r*88.0%
Applied egg-rr88.0%
Taylor expanded in y around 0 79.0%
neg-mul-179.0%
distribute-neg-frac279.0%
Simplified79.0%
if -1e5 < (*.f64 z t) < 5.00000000000000024e-5Initial program 99.9%
Taylor expanded in y around inf 81.9%
if 5.00000000000000024e-5 < (*.f64 z t) Initial program 91.5%
Taylor expanded in t around inf 82.1%
distribute-lft-out82.1%
associate-*r/82.1%
mul-1-neg82.1%
associate-/l*83.8%
Simplified83.8%
Taylor expanded in z around inf 85.6%
Final simplification82.1%
NOTE: x, y, z, and t should be sorted in increasing order before calling this function. (FPCore (x y z t) :precision binary64 (if (<= (* z t) -10000000000000.0) (/ x (- (* z t))) (if (<= (* z t) 5e-5) (/ x y) (/ (/ x z) (- t)))))
assert(x < y && y < z && z < t);
double code(double x, double y, double z, double t) {
double tmp;
if ((z * t) <= -10000000000000.0) {
tmp = x / -(z * t);
} else if ((z * t) <= 5e-5) {
tmp = x / y;
} else {
tmp = (x / z) / -t;
}
return tmp;
}
NOTE: x, y, z, and t should be sorted in increasing order before calling this function.
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 ((z * t) <= (-10000000000000.0d0)) then
tmp = x / -(z * t)
else if ((z * t) <= 5d-5) then
tmp = x / y
else
tmp = (x / z) / -t
end if
code = tmp
end function
assert x < y && y < z && z < t;
public static double code(double x, double y, double z, double t) {
double tmp;
if ((z * t) <= -10000000000000.0) {
tmp = x / -(z * t);
} else if ((z * t) <= 5e-5) {
tmp = x / y;
} else {
tmp = (x / z) / -t;
}
return tmp;
}
[x, y, z, t] = sort([x, y, z, t]) def code(x, y, z, t): tmp = 0 if (z * t) <= -10000000000000.0: tmp = x / -(z * t) elif (z * t) <= 5e-5: tmp = x / y else: tmp = (x / z) / -t return tmp
x, y, z, t = sort([x, y, z, t]) function code(x, y, z, t) tmp = 0.0 if (Float64(z * t) <= -10000000000000.0) tmp = Float64(x / Float64(-Float64(z * t))); elseif (Float64(z * t) <= 5e-5) tmp = Float64(x / y); else tmp = Float64(Float64(x / z) / Float64(-t)); end return tmp end
x, y, z, t = num2cell(sort([x, y, z, t])){:}
function tmp_2 = code(x, y, z, t)
tmp = 0.0;
if ((z * t) <= -10000000000000.0)
tmp = x / -(z * t);
elseif ((z * t) <= 5e-5)
tmp = x / y;
else
tmp = (x / z) / -t;
end
tmp_2 = tmp;
end
NOTE: x, y, z, and t should be sorted in increasing order before calling this function. code[x_, y_, z_, t_] := If[LessEqual[N[(z * t), $MachinePrecision], -10000000000000.0], N[(x / (-N[(z * t), $MachinePrecision])), $MachinePrecision], If[LessEqual[N[(z * t), $MachinePrecision], 5e-5], N[(x / y), $MachinePrecision], N[(N[(x / z), $MachinePrecision] / (-t)), $MachinePrecision]]]
\begin{array}{l}
[x, y, z, t] = \mathsf{sort}([x, y, z, t])\\
\\
\begin{array}{l}
\mathbf{if}\;z \cdot t \leq -10000000000000:\\
\;\;\;\;\frac{x}{-z \cdot t}\\
\mathbf{elif}\;z \cdot t \leq 5 \cdot 10^{-5}:\\
\;\;\;\;\frac{x}{y}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{x}{z}}{-t}\\
\end{array}
\end{array}
if (*.f64 z t) < -1e13Initial program 93.2%
Taylor expanded in y around 0 78.4%
associate-*r/78.4%
neg-mul-178.4%
Simplified78.4%
if -1e13 < (*.f64 z t) < 5.00000000000000024e-5Initial program 99.9%
Taylor expanded in y around inf 81.2%
if 5.00000000000000024e-5 < (*.f64 z t) Initial program 91.5%
Taylor expanded in t around inf 82.1%
distribute-lft-out82.1%
associate-*r/82.1%
mul-1-neg82.1%
associate-/l*83.8%
Simplified83.8%
Taylor expanded in z around inf 85.6%
Final simplification81.6%
NOTE: x, y, z, and t should be sorted in increasing order before calling this function. (FPCore (x y z t) :precision binary64 (if (or (<= (* z t) -1e+142) (not (<= (* z t) 2e+152))) (/ x (* z t)) (/ x y)))
assert(x < y && y < z && z < t);
double code(double x, double y, double z, double t) {
double tmp;
if (((z * t) <= -1e+142) || !((z * t) <= 2e+152)) {
tmp = x / (z * t);
} else {
tmp = x / y;
}
return tmp;
}
NOTE: x, y, z, and t should be sorted in increasing order before calling this function.
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 (((z * t) <= (-1d+142)) .or. (.not. ((z * t) <= 2d+152))) then
tmp = x / (z * t)
else
tmp = x / y
end if
code = tmp
end function
assert x < y && y < z && z < t;
public static double code(double x, double y, double z, double t) {
double tmp;
if (((z * t) <= -1e+142) || !((z * t) <= 2e+152)) {
tmp = x / (z * t);
} else {
tmp = x / y;
}
return tmp;
}
[x, y, z, t] = sort([x, y, z, t]) def code(x, y, z, t): tmp = 0 if ((z * t) <= -1e+142) or not ((z * t) <= 2e+152): tmp = x / (z * t) else: tmp = x / y return tmp
x, y, z, t = sort([x, y, z, t]) function code(x, y, z, t) tmp = 0.0 if ((Float64(z * t) <= -1e+142) || !(Float64(z * t) <= 2e+152)) tmp = Float64(x / Float64(z * t)); else tmp = Float64(x / y); end return tmp end
x, y, z, t = num2cell(sort([x, y, z, t])){:}
function tmp_2 = code(x, y, z, t)
tmp = 0.0;
if (((z * t) <= -1e+142) || ~(((z * t) <= 2e+152)))
tmp = x / (z * t);
else
tmp = x / y;
end
tmp_2 = tmp;
end
NOTE: x, y, z, and t should be sorted in increasing order before calling this function. code[x_, y_, z_, t_] := If[Or[LessEqual[N[(z * t), $MachinePrecision], -1e+142], N[Not[LessEqual[N[(z * t), $MachinePrecision], 2e+152]], $MachinePrecision]], N[(x / N[(z * t), $MachinePrecision]), $MachinePrecision], N[(x / y), $MachinePrecision]]
\begin{array}{l}
[x, y, z, t] = \mathsf{sort}([x, y, z, t])\\
\\
\begin{array}{l}
\mathbf{if}\;z \cdot t \leq -1 \cdot 10^{+142} \lor \neg \left(z \cdot t \leq 2 \cdot 10^{+152}\right):\\
\;\;\;\;\frac{x}{z \cdot t}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{y}\\
\end{array}
\end{array}
if (*.f64 z t) < -1.00000000000000005e142 or 2.0000000000000001e152 < (*.f64 z t) Initial program 86.9%
Taylor expanded in t around inf 91.2%
distribute-lft-out91.2%
associate-*r/91.2%
mul-1-neg91.2%
associate-/l*94.2%
Simplified94.2%
Taylor expanded in z around inf 94.2%
associate-/l/84.1%
distribute-neg-frac84.1%
*-commutative84.1%
Applied egg-rr84.1%
neg-sub084.1%
sub-neg84.1%
add-sqr-sqrt50.4%
sqrt-unprod69.4%
sqr-neg69.4%
sqrt-unprod22.3%
add-sqr-sqrt60.3%
Applied egg-rr60.3%
+-lft-identity60.3%
Simplified60.3%
if -1.00000000000000005e142 < (*.f64 z t) < 2.0000000000000001e152Initial program 99.8%
Taylor expanded in y around inf 69.3%
Final simplification66.9%
NOTE: x, y, z, and t should be sorted in increasing order before calling this function. (FPCore (x y z t) :precision binary64 (if (<= (* z t) 2e+152) (/ x (- y (* z t))) (/ (/ (- x) t) z)))
assert(x < y && y < z && z < t);
double code(double x, double y, double z, double t) {
double tmp;
if ((z * t) <= 2e+152) {
tmp = x / (y - (z * t));
} else {
tmp = (-x / t) / z;
}
return tmp;
}
NOTE: x, y, z, and t should be sorted in increasing order before calling this function.
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 ((z * t) <= 2d+152) then
tmp = x / (y - (z * t))
else
tmp = (-x / t) / z
end if
code = tmp
end function
assert x < y && y < z && z < t;
public static double code(double x, double y, double z, double t) {
double tmp;
if ((z * t) <= 2e+152) {
tmp = x / (y - (z * t));
} else {
tmp = (-x / t) / z;
}
return tmp;
}
[x, y, z, t] = sort([x, y, z, t]) def code(x, y, z, t): tmp = 0 if (z * t) <= 2e+152: tmp = x / (y - (z * t)) else: tmp = (-x / t) / z return tmp
x, y, z, t = sort([x, y, z, t]) function code(x, y, z, t) tmp = 0.0 if (Float64(z * t) <= 2e+152) tmp = Float64(x / Float64(y - Float64(z * t))); else tmp = Float64(Float64(Float64(-x) / t) / z); end return tmp end
x, y, z, t = num2cell(sort([x, y, z, t])){:}
function tmp_2 = code(x, y, z, t)
tmp = 0.0;
if ((z * t) <= 2e+152)
tmp = x / (y - (z * t));
else
tmp = (-x / t) / z;
end
tmp_2 = tmp;
end
NOTE: x, y, z, and t should be sorted in increasing order before calling this function. code[x_, y_, z_, t_] := If[LessEqual[N[(z * t), $MachinePrecision], 2e+152], N[(x / N[(y - N[(z * t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[((-x) / t), $MachinePrecision] / z), $MachinePrecision]]
\begin{array}{l}
[x, y, z, t] = \mathsf{sort}([x, y, z, t])\\
\\
\begin{array}{l}
\mathbf{if}\;z \cdot t \leq 2 \cdot 10^{+152}:\\
\;\;\;\;\frac{x}{y - z \cdot t}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{-x}{t}}{z}\\
\end{array}
\end{array}
if (*.f64 z t) < 2.0000000000000001e152Initial program 98.1%
if 2.0000000000000001e152 < (*.f64 z t) Initial program 85.0%
Taylor expanded in z around inf 85.0%
add-cube-cbrt84.8%
pow384.8%
Applied egg-rr84.8%
rem-cube-cbrt85.0%
*-commutative85.0%
associate-/r*99.9%
Applied egg-rr99.9%
Taylor expanded in y around 0 99.9%
neg-mul-199.9%
distribute-neg-frac299.9%
Simplified99.9%
Final simplification98.3%
NOTE: x, y, z, and t should be sorted in increasing order before calling this function. (FPCore (x y z t) :precision binary64 (/ x y))
assert(x < y && y < z && z < t);
double code(double x, double y, double z, double t) {
return x / y;
}
NOTE: x, y, z, and t should be sorted in increasing order before calling this function.
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
end function
assert x < y && y < z && z < t;
public static double code(double x, double y, double z, double t) {
return x / y;
}
[x, y, z, t] = sort([x, y, z, t]) def code(x, y, z, t): return x / y
x, y, z, t = sort([x, y, z, t]) function code(x, y, z, t) return Float64(x / y) end
x, y, z, t = num2cell(sort([x, y, z, t])){:}
function tmp = code(x, y, z, t)
tmp = x / y;
end
NOTE: x, y, z, and t should be sorted in increasing order before calling this function. code[x_, y_, z_, t_] := N[(x / y), $MachinePrecision]
\begin{array}{l}
[x, y, z, t] = \mathsf{sort}([x, y, z, t])\\
\\
\frac{x}{y}
\end{array}
Initial program 96.3%
Taylor expanded in y around inf 55.2%
(FPCore (x y z t)
:precision binary64
(let* ((t_1 (/ 1.0 (- (/ y x) (* (/ z x) t)))))
(if (< x -1.618195973607049e+50)
t_1
(if (< x 2.1378306434876444e+131) (/ x (- y (* z t))) t_1))))
double code(double x, double y, double z, double t) {
double t_1 = 1.0 / ((y / x) - ((z / x) * t));
double tmp;
if (x < -1.618195973607049e+50) {
tmp = t_1;
} else if (x < 2.1378306434876444e+131) {
tmp = x / (y - (z * t));
} 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 = 1.0d0 / ((y / x) - ((z / x) * t))
if (x < (-1.618195973607049d+50)) then
tmp = t_1
else if (x < 2.1378306434876444d+131) then
tmp = x / (y - (z * t))
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 = 1.0 / ((y / x) - ((z / x) * t));
double tmp;
if (x < -1.618195973607049e+50) {
tmp = t_1;
} else if (x < 2.1378306434876444e+131) {
tmp = x / (y - (z * t));
} else {
tmp = t_1;
}
return tmp;
}
def code(x, y, z, t): t_1 = 1.0 / ((y / x) - ((z / x) * t)) tmp = 0 if x < -1.618195973607049e+50: tmp = t_1 elif x < 2.1378306434876444e+131: tmp = x / (y - (z * t)) else: tmp = t_1 return tmp
function code(x, y, z, t) t_1 = Float64(1.0 / Float64(Float64(y / x) - Float64(Float64(z / x) * t))) tmp = 0.0 if (x < -1.618195973607049e+50) tmp = t_1; elseif (x < 2.1378306434876444e+131) tmp = Float64(x / Float64(y - Float64(z * t))); else tmp = t_1; end return tmp end
function tmp_2 = code(x, y, z, t) t_1 = 1.0 / ((y / x) - ((z / x) * t)); tmp = 0.0; if (x < -1.618195973607049e+50) tmp = t_1; elseif (x < 2.1378306434876444e+131) tmp = x / (y - (z * t)); else tmp = t_1; end tmp_2 = tmp; end
code[x_, y_, z_, t_] := Block[{t$95$1 = N[(1.0 / N[(N[(y / x), $MachinePrecision] - N[(N[(z / x), $MachinePrecision] * t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[Less[x, -1.618195973607049e+50], t$95$1, If[Less[x, 2.1378306434876444e+131], N[(x / N[(y - N[(z * t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \frac{1}{\frac{y}{x} - \frac{z}{x} \cdot t}\\
\mathbf{if}\;x < -1.618195973607049 \cdot 10^{+50}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;x < 2.1378306434876444 \cdot 10^{+131}:\\
\;\;\;\;\frac{x}{y - z \cdot t}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
herbie shell --seed 2024181
(FPCore (x y z t)
:name "Diagrams.Solve.Tridiagonal:solveTriDiagonal from diagrams-solve-0.1, B"
:precision binary64
:alt
(! :herbie-platform default (if (< x -161819597360704900000000000000000000000000000000000) (/ 1 (- (/ y x) (* (/ z x) t))) (if (< x 213783064348764440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) (/ x (- y (* z t))) (/ 1 (- (/ y x) (* (/ z x) t))))))
(/ x (- y (* z t))))