
(FPCore (u v t1) :precision binary64 (/ (* (- t1) v) (* (+ t1 u) (+ t1 u))))
double code(double u, double v, double t1) {
return (-t1 * v) / ((t1 + u) * (t1 + u));
}
real(8) function code(u, v, t1)
real(8), intent (in) :: u
real(8), intent (in) :: v
real(8), intent (in) :: t1
code = (-t1 * v) / ((t1 + u) * (t1 + u))
end function
public static double code(double u, double v, double t1) {
return (-t1 * v) / ((t1 + u) * (t1 + u));
}
def code(u, v, t1): return (-t1 * v) / ((t1 + u) * (t1 + u))
function code(u, v, t1) return Float64(Float64(Float64(-t1) * v) / Float64(Float64(t1 + u) * Float64(t1 + u))) end
function tmp = code(u, v, t1) tmp = (-t1 * v) / ((t1 + u) * (t1 + u)); end
code[u_, v_, t1_] := N[(N[((-t1) * v), $MachinePrecision] / N[(N[(t1 + u), $MachinePrecision] * N[(t1 + u), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{\left(-t1\right) \cdot v}{\left(t1 + u\right) \cdot \left(t1 + u\right)}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 9 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (u v t1) :precision binary64 (/ (* (- t1) v) (* (+ t1 u) (+ t1 u))))
double code(double u, double v, double t1) {
return (-t1 * v) / ((t1 + u) * (t1 + u));
}
real(8) function code(u, v, t1)
real(8), intent (in) :: u
real(8), intent (in) :: v
real(8), intent (in) :: t1
code = (-t1 * v) / ((t1 + u) * (t1 + u))
end function
public static double code(double u, double v, double t1) {
return (-t1 * v) / ((t1 + u) * (t1 + u));
}
def code(u, v, t1): return (-t1 * v) / ((t1 + u) * (t1 + u))
function code(u, v, t1) return Float64(Float64(Float64(-t1) * v) / Float64(Float64(t1 + u) * Float64(t1 + u))) end
function tmp = code(u, v, t1) tmp = (-t1 * v) / ((t1 + u) * (t1 + u)); end
code[u_, v_, t1_] := N[(N[((-t1) * v), $MachinePrecision] / N[(N[(t1 + u), $MachinePrecision] * N[(t1 + u), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{\left(-t1\right) \cdot v}{\left(t1 + u\right) \cdot \left(t1 + u\right)}
\end{array}
(FPCore (u v t1) :precision binary64 (* (/ (- t1) (+ t1 u)) (/ v (+ t1 u))))
double code(double u, double v, double t1) {
return (-t1 / (t1 + u)) * (v / (t1 + u));
}
real(8) function code(u, v, t1)
real(8), intent (in) :: u
real(8), intent (in) :: v
real(8), intent (in) :: t1
code = (-t1 / (t1 + u)) * (v / (t1 + u))
end function
public static double code(double u, double v, double t1) {
return (-t1 / (t1 + u)) * (v / (t1 + u));
}
def code(u, v, t1): return (-t1 / (t1 + u)) * (v / (t1 + u))
function code(u, v, t1) return Float64(Float64(Float64(-t1) / Float64(t1 + u)) * Float64(v / Float64(t1 + u))) end
function tmp = code(u, v, t1) tmp = (-t1 / (t1 + u)) * (v / (t1 + u)); end
code[u_, v_, t1_] := N[(N[((-t1) / N[(t1 + u), $MachinePrecision]), $MachinePrecision] * N[(v / N[(t1 + u), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{-t1}{t1 + u} \cdot \frac{v}{t1 + u}
\end{array}
Initial program 73.3%
times-frac96.9%
Simplified96.9%
Final simplification96.9%
(FPCore (u v t1) :precision binary64 (if (or (<= u -2.9e-34) (not (<= u 1.25e+33))) (/ (* t1 (/ v (+ t1 u))) (- t1 u)) (/ (- v) t1)))
double code(double u, double v, double t1) {
double tmp;
if ((u <= -2.9e-34) || !(u <= 1.25e+33)) {
tmp = (t1 * (v / (t1 + u))) / (t1 - u);
} else {
tmp = -v / t1;
}
return tmp;
}
real(8) function code(u, v, t1)
real(8), intent (in) :: u
real(8), intent (in) :: v
real(8), intent (in) :: t1
real(8) :: tmp
if ((u <= (-2.9d-34)) .or. (.not. (u <= 1.25d+33))) then
tmp = (t1 * (v / (t1 + u))) / (t1 - u)
else
tmp = -v / t1
end if
code = tmp
end function
public static double code(double u, double v, double t1) {
double tmp;
if ((u <= -2.9e-34) || !(u <= 1.25e+33)) {
tmp = (t1 * (v / (t1 + u))) / (t1 - u);
} else {
tmp = -v / t1;
}
return tmp;
}
def code(u, v, t1): tmp = 0 if (u <= -2.9e-34) or not (u <= 1.25e+33): tmp = (t1 * (v / (t1 + u))) / (t1 - u) else: tmp = -v / t1 return tmp
function code(u, v, t1) tmp = 0.0 if ((u <= -2.9e-34) || !(u <= 1.25e+33)) tmp = Float64(Float64(t1 * Float64(v / Float64(t1 + u))) / Float64(t1 - u)); else tmp = Float64(Float64(-v) / t1); end return tmp end
function tmp_2 = code(u, v, t1) tmp = 0.0; if ((u <= -2.9e-34) || ~((u <= 1.25e+33))) tmp = (t1 * (v / (t1 + u))) / (t1 - u); else tmp = -v / t1; end tmp_2 = tmp; end
code[u_, v_, t1_] := If[Or[LessEqual[u, -2.9e-34], N[Not[LessEqual[u, 1.25e+33]], $MachinePrecision]], N[(N[(t1 * N[(v / N[(t1 + u), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(t1 - u), $MachinePrecision]), $MachinePrecision], N[((-v) / t1), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;u \leq -2.9 \cdot 10^{-34} \lor \neg \left(u \leq 1.25 \cdot 10^{+33}\right):\\
\;\;\;\;\frac{t1 \cdot \frac{v}{t1 + u}}{t1 - u}\\
\mathbf{else}:\\
\;\;\;\;\frac{-v}{t1}\\
\end{array}
\end{array}
if u < -2.9000000000000002e-34 or 1.24999999999999993e33 < u Initial program 79.5%
times-frac96.4%
Simplified96.4%
frac-2neg96.4%
remove-double-neg96.4%
associate-*l/99.8%
distribute-neg-in99.8%
add-sqr-sqrt45.0%
sqrt-unprod87.2%
sqr-neg87.2%
sqrt-unprod48.0%
add-sqr-sqrt88.3%
sub-neg88.3%
Applied egg-rr88.3%
if -2.9000000000000002e-34 < u < 1.24999999999999993e33Initial program 68.3%
times-frac97.3%
Simplified97.3%
Taylor expanded in t1 around inf 77.9%
associate-*r/77.9%
neg-mul-177.9%
Simplified77.9%
Final simplification82.6%
(FPCore (u v t1) :precision binary64 (if (or (<= u -4.5e-35) (not (<= u 2.9e+28))) (* (/ (- t1) u) (/ v u)) (/ (- v) t1)))
double code(double u, double v, double t1) {
double tmp;
if ((u <= -4.5e-35) || !(u <= 2.9e+28)) {
tmp = (-t1 / u) * (v / u);
} else {
tmp = -v / t1;
}
return tmp;
}
real(8) function code(u, v, t1)
real(8), intent (in) :: u
real(8), intent (in) :: v
real(8), intent (in) :: t1
real(8) :: tmp
if ((u <= (-4.5d-35)) .or. (.not. (u <= 2.9d+28))) then
tmp = (-t1 / u) * (v / u)
else
tmp = -v / t1
end if
code = tmp
end function
public static double code(double u, double v, double t1) {
double tmp;
if ((u <= -4.5e-35) || !(u <= 2.9e+28)) {
tmp = (-t1 / u) * (v / u);
} else {
tmp = -v / t1;
}
return tmp;
}
def code(u, v, t1): tmp = 0 if (u <= -4.5e-35) or not (u <= 2.9e+28): tmp = (-t1 / u) * (v / u) else: tmp = -v / t1 return tmp
function code(u, v, t1) tmp = 0.0 if ((u <= -4.5e-35) || !(u <= 2.9e+28)) tmp = Float64(Float64(Float64(-t1) / u) * Float64(v / u)); else tmp = Float64(Float64(-v) / t1); end return tmp end
function tmp_2 = code(u, v, t1) tmp = 0.0; if ((u <= -4.5e-35) || ~((u <= 2.9e+28))) tmp = (-t1 / u) * (v / u); else tmp = -v / t1; end tmp_2 = tmp; end
code[u_, v_, t1_] := If[Or[LessEqual[u, -4.5e-35], N[Not[LessEqual[u, 2.9e+28]], $MachinePrecision]], N[(N[((-t1) / u), $MachinePrecision] * N[(v / u), $MachinePrecision]), $MachinePrecision], N[((-v) / t1), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;u \leq -4.5 \cdot 10^{-35} \lor \neg \left(u \leq 2.9 \cdot 10^{+28}\right):\\
\;\;\;\;\frac{-t1}{u} \cdot \frac{v}{u}\\
\mathbf{else}:\\
\;\;\;\;\frac{-v}{t1}\\
\end{array}
\end{array}
if u < -4.5000000000000001e-35 or 2.9000000000000001e28 < u Initial program 79.5%
times-frac96.4%
Simplified96.4%
Taylor expanded in t1 around 0 80.2%
Taylor expanded in t1 around 0 79.5%
mul-1-neg79.5%
distribute-neg-frac79.5%
Simplified79.5%
if -4.5000000000000001e-35 < u < 2.9000000000000001e28Initial program 68.3%
times-frac97.3%
Simplified97.3%
Taylor expanded in t1 around inf 77.9%
associate-*r/77.9%
neg-mul-177.9%
Simplified77.9%
Final simplification78.6%
(FPCore (u v t1) :precision binary64 (if (or (<= u -2e-31) (not (<= u 1.26e+28))) (/ t1 (* u (/ (- u) v))) (/ (- v) t1)))
double code(double u, double v, double t1) {
double tmp;
if ((u <= -2e-31) || !(u <= 1.26e+28)) {
tmp = t1 / (u * (-u / v));
} else {
tmp = -v / t1;
}
return tmp;
}
real(8) function code(u, v, t1)
real(8), intent (in) :: u
real(8), intent (in) :: v
real(8), intent (in) :: t1
real(8) :: tmp
if ((u <= (-2d-31)) .or. (.not. (u <= 1.26d+28))) then
tmp = t1 / (u * (-u / v))
else
tmp = -v / t1
end if
code = tmp
end function
public static double code(double u, double v, double t1) {
double tmp;
if ((u <= -2e-31) || !(u <= 1.26e+28)) {
tmp = t1 / (u * (-u / v));
} else {
tmp = -v / t1;
}
return tmp;
}
def code(u, v, t1): tmp = 0 if (u <= -2e-31) or not (u <= 1.26e+28): tmp = t1 / (u * (-u / v)) else: tmp = -v / t1 return tmp
function code(u, v, t1) tmp = 0.0 if ((u <= -2e-31) || !(u <= 1.26e+28)) tmp = Float64(t1 / Float64(u * Float64(Float64(-u) / v))); else tmp = Float64(Float64(-v) / t1); end return tmp end
function tmp_2 = code(u, v, t1) tmp = 0.0; if ((u <= -2e-31) || ~((u <= 1.26e+28))) tmp = t1 / (u * (-u / v)); else tmp = -v / t1; end tmp_2 = tmp; end
code[u_, v_, t1_] := If[Or[LessEqual[u, -2e-31], N[Not[LessEqual[u, 1.26e+28]], $MachinePrecision]], N[(t1 / N[(u * N[((-u) / v), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[((-v) / t1), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;u \leq -2 \cdot 10^{-31} \lor \neg \left(u \leq 1.26 \cdot 10^{+28}\right):\\
\;\;\;\;\frac{t1}{u \cdot \frac{-u}{v}}\\
\mathbf{else}:\\
\;\;\;\;\frac{-v}{t1}\\
\end{array}
\end{array}
if u < -2e-31 or 1.26e28 < u Initial program 79.5%
times-frac96.4%
Simplified96.4%
Taylor expanded in t1 around 0 80.2%
Taylor expanded in t1 around 0 79.5%
mul-1-neg79.5%
distribute-neg-frac79.5%
Simplified79.5%
*-commutative79.5%
clear-num80.3%
frac-2neg80.3%
frac-times85.1%
*-un-lft-identity85.1%
remove-double-neg85.1%
Applied egg-rr85.1%
if -2e-31 < u < 1.26e28Initial program 68.3%
times-frac97.3%
Simplified97.3%
Taylor expanded in t1 around inf 77.9%
associate-*r/77.9%
neg-mul-177.9%
Simplified77.9%
Final simplification81.1%
(FPCore (u v t1) :precision binary64 (if (<= u -3.5e-33) (/ (/ t1 (/ u v)) (- u)) (if (<= u 7.6e+30) (/ (- v) t1) (/ t1 (* u (/ (- u) v))))))
double code(double u, double v, double t1) {
double tmp;
if (u <= -3.5e-33) {
tmp = (t1 / (u / v)) / -u;
} else if (u <= 7.6e+30) {
tmp = -v / t1;
} else {
tmp = t1 / (u * (-u / v));
}
return tmp;
}
real(8) function code(u, v, t1)
real(8), intent (in) :: u
real(8), intent (in) :: v
real(8), intent (in) :: t1
real(8) :: tmp
if (u <= (-3.5d-33)) then
tmp = (t1 / (u / v)) / -u
else if (u <= 7.6d+30) then
tmp = -v / t1
else
tmp = t1 / (u * (-u / v))
end if
code = tmp
end function
public static double code(double u, double v, double t1) {
double tmp;
if (u <= -3.5e-33) {
tmp = (t1 / (u / v)) / -u;
} else if (u <= 7.6e+30) {
tmp = -v / t1;
} else {
tmp = t1 / (u * (-u / v));
}
return tmp;
}
def code(u, v, t1): tmp = 0 if u <= -3.5e-33: tmp = (t1 / (u / v)) / -u elif u <= 7.6e+30: tmp = -v / t1 else: tmp = t1 / (u * (-u / v)) return tmp
function code(u, v, t1) tmp = 0.0 if (u <= -3.5e-33) tmp = Float64(Float64(t1 / Float64(u / v)) / Float64(-u)); elseif (u <= 7.6e+30) tmp = Float64(Float64(-v) / t1); else tmp = Float64(t1 / Float64(u * Float64(Float64(-u) / v))); end return tmp end
function tmp_2 = code(u, v, t1) tmp = 0.0; if (u <= -3.5e-33) tmp = (t1 / (u / v)) / -u; elseif (u <= 7.6e+30) tmp = -v / t1; else tmp = t1 / (u * (-u / v)); end tmp_2 = tmp; end
code[u_, v_, t1_] := If[LessEqual[u, -3.5e-33], N[(N[(t1 / N[(u / v), $MachinePrecision]), $MachinePrecision] / (-u)), $MachinePrecision], If[LessEqual[u, 7.6e+30], N[((-v) / t1), $MachinePrecision], N[(t1 / N[(u * N[((-u) / v), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;u \leq -3.5 \cdot 10^{-33}:\\
\;\;\;\;\frac{\frac{t1}{\frac{u}{v}}}{-u}\\
\mathbf{elif}\;u \leq 7.6 \cdot 10^{+30}:\\
\;\;\;\;\frac{-v}{t1}\\
\mathbf{else}:\\
\;\;\;\;\frac{t1}{u \cdot \frac{-u}{v}}\\
\end{array}
\end{array}
if u < -3.4999999999999999e-33Initial program 77.5%
times-frac95.3%
Simplified95.3%
Taylor expanded in t1 around 0 78.6%
Taylor expanded in t1 around 0 77.7%
mul-1-neg77.7%
distribute-neg-frac77.7%
Simplified77.7%
associate-*l/82.2%
frac-2neg82.2%
add-sqr-sqrt39.8%
sqrt-unprod57.5%
sqr-neg57.5%
sqrt-unprod27.9%
add-sqr-sqrt45.2%
distribute-lft-neg-in45.2%
clear-num46.5%
un-div-inv46.5%
add-sqr-sqrt17.3%
sqrt-unprod47.9%
sqr-neg47.9%
sqrt-unprod43.6%
add-sqr-sqrt83.6%
Applied egg-rr83.6%
if -3.4999999999999999e-33 < u < 7.6000000000000003e30Initial program 68.3%
times-frac97.3%
Simplified97.3%
Taylor expanded in t1 around inf 77.9%
associate-*r/77.9%
neg-mul-177.9%
Simplified77.9%
if 7.6000000000000003e30 < u Initial program 82.2%
times-frac97.9%
Simplified97.9%
Taylor expanded in t1 around 0 82.4%
Taylor expanded in t1 around 0 82.0%
mul-1-neg82.0%
distribute-neg-frac82.0%
Simplified82.0%
*-commutative82.0%
clear-num82.1%
frac-2neg82.1%
frac-times90.0%
*-un-lft-identity90.0%
remove-double-neg90.0%
Applied egg-rr90.0%
Final simplification81.7%
(FPCore (u v t1) :precision binary64 (if (or (<= u -1.75e+51) (not (<= u 5.1e+120))) (/ v (* u (/ u t1))) (/ (- v) t1)))
double code(double u, double v, double t1) {
double tmp;
if ((u <= -1.75e+51) || !(u <= 5.1e+120)) {
tmp = v / (u * (u / t1));
} else {
tmp = -v / t1;
}
return tmp;
}
real(8) function code(u, v, t1)
real(8), intent (in) :: u
real(8), intent (in) :: v
real(8), intent (in) :: t1
real(8) :: tmp
if ((u <= (-1.75d+51)) .or. (.not. (u <= 5.1d+120))) then
tmp = v / (u * (u / t1))
else
tmp = -v / t1
end if
code = tmp
end function
public static double code(double u, double v, double t1) {
double tmp;
if ((u <= -1.75e+51) || !(u <= 5.1e+120)) {
tmp = v / (u * (u / t1));
} else {
tmp = -v / t1;
}
return tmp;
}
def code(u, v, t1): tmp = 0 if (u <= -1.75e+51) or not (u <= 5.1e+120): tmp = v / (u * (u / t1)) else: tmp = -v / t1 return tmp
function code(u, v, t1) tmp = 0.0 if ((u <= -1.75e+51) || !(u <= 5.1e+120)) tmp = Float64(v / Float64(u * Float64(u / t1))); else tmp = Float64(Float64(-v) / t1); end return tmp end
function tmp_2 = code(u, v, t1) tmp = 0.0; if ((u <= -1.75e+51) || ~((u <= 5.1e+120))) tmp = v / (u * (u / t1)); else tmp = -v / t1; end tmp_2 = tmp; end
code[u_, v_, t1_] := If[Or[LessEqual[u, -1.75e+51], N[Not[LessEqual[u, 5.1e+120]], $MachinePrecision]], N[(v / N[(u * N[(u / t1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[((-v) / t1), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;u \leq -1.75 \cdot 10^{+51} \lor \neg \left(u \leq 5.1 \cdot 10^{+120}\right):\\
\;\;\;\;\frac{v}{u \cdot \frac{u}{t1}}\\
\mathbf{else}:\\
\;\;\;\;\frac{-v}{t1}\\
\end{array}
\end{array}
if u < -1.75e51 or 5.10000000000000027e120 < u Initial program 79.4%
times-frac95.5%
Simplified95.5%
Taylor expanded in t1 around 0 84.7%
Taylor expanded in t1 around 0 83.8%
mul-1-neg83.8%
distribute-neg-frac83.8%
Simplified83.8%
clear-num83.1%
frac-times70.9%
*-un-lft-identity70.9%
add-sqr-sqrt31.9%
sqrt-unprod64.9%
sqr-neg64.9%
sqrt-unprod36.8%
add-sqr-sqrt59.5%
Applied egg-rr59.5%
if -1.75e51 < u < 5.10000000000000027e120Initial program 69.9%
times-frac97.7%
Simplified97.7%
Taylor expanded in t1 around inf 72.8%
associate-*r/72.8%
neg-mul-172.8%
Simplified72.8%
Final simplification68.0%
(FPCore (u v t1) :precision binary64 (/ (- v) (+ t1 u)))
double code(double u, double v, double t1) {
return -v / (t1 + u);
}
real(8) function code(u, v, t1)
real(8), intent (in) :: u
real(8), intent (in) :: v
real(8), intent (in) :: t1
code = -v / (t1 + u)
end function
public static double code(double u, double v, double t1) {
return -v / (t1 + u);
}
def code(u, v, t1): return -v / (t1 + u)
function code(u, v, t1) return Float64(Float64(-v) / Float64(t1 + u)) end
function tmp = code(u, v, t1) tmp = -v / (t1 + u); end
code[u_, v_, t1_] := N[((-v) / N[(t1 + u), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{-v}{t1 + u}
\end{array}
Initial program 73.3%
times-frac96.9%
Simplified96.9%
Taylor expanded in t1 around inf 59.5%
Final simplification59.5%
(FPCore (u v t1) :precision binary64 (/ (- v) t1))
double code(double u, double v, double t1) {
return -v / t1;
}
real(8) function code(u, v, t1)
real(8), intent (in) :: u
real(8), intent (in) :: v
real(8), intent (in) :: t1
code = -v / t1
end function
public static double code(double u, double v, double t1) {
return -v / t1;
}
def code(u, v, t1): return -v / t1
function code(u, v, t1) return Float64(Float64(-v) / t1) end
function tmp = code(u, v, t1) tmp = -v / t1; end
code[u_, v_, t1_] := N[((-v) / t1), $MachinePrecision]
\begin{array}{l}
\\
\frac{-v}{t1}
\end{array}
Initial program 73.3%
times-frac96.9%
Simplified96.9%
Taylor expanded in t1 around inf 55.0%
associate-*r/55.0%
neg-mul-155.0%
Simplified55.0%
Final simplification55.0%
(FPCore (u v t1) :precision binary64 (/ v u))
double code(double u, double v, double t1) {
return v / u;
}
real(8) function code(u, v, t1)
real(8), intent (in) :: u
real(8), intent (in) :: v
real(8), intent (in) :: t1
code = v / u
end function
public static double code(double u, double v, double t1) {
return v / u;
}
def code(u, v, t1): return v / u
function code(u, v, t1) return Float64(v / u) end
function tmp = code(u, v, t1) tmp = v / u; end
code[u_, v_, t1_] := N[(v / u), $MachinePrecision]
\begin{array}{l}
\\
\frac{v}{u}
\end{array}
Initial program 73.3%
times-frac96.9%
Simplified96.9%
frac-2neg96.9%
remove-double-neg96.9%
associate-*l/97.6%
distribute-neg-in97.6%
add-sqr-sqrt48.7%
sqrt-unprod69.2%
sqr-neg69.2%
sqrt-unprod28.0%
add-sqr-sqrt55.0%
sub-neg55.0%
Applied egg-rr55.0%
associate-*r/52.6%
Simplified52.6%
Taylor expanded in t1 around 0 47.4%
Taylor expanded in t1 around inf 13.6%
Final simplification13.6%
herbie shell --seed 2023306
(FPCore (u v t1)
:name "Rosa's DopplerBench"
:precision binary64
(/ (* (- t1) v) (* (+ t1 u) (+ t1 u))))