
(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 8 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 (- (- u) t1)) (/ v (+ t1 u))))
double code(double u, double v, double t1) {
return (t1 / (-u - t1)) * (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 / (-u - t1)) * (v / (t1 + u))
end function
public static double code(double u, double v, double t1) {
return (t1 / (-u - t1)) * (v / (t1 + u));
}
def code(u, v, t1): return (t1 / (-u - t1)) * (v / (t1 + u))
function code(u, v, t1) return Float64(Float64(t1 / Float64(Float64(-u) - t1)) * Float64(v / Float64(t1 + u))) end
function tmp = code(u, v, t1) tmp = (t1 / (-u - t1)) * (v / (t1 + u)); end
code[u_, v_, t1_] := N[(N[(t1 / N[((-u) - t1), $MachinePrecision]), $MachinePrecision] * N[(v / N[(t1 + u), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{t1}{\left(-u\right) - t1} \cdot \frac{v}{t1 + u}
\end{array}
Initial program 71.6%
times-frac98.3%
distribute-frac-neg98.3%
distribute-neg-frac298.3%
+-commutative98.3%
distribute-neg-in98.3%
unsub-neg98.3%
Simplified98.3%
Final simplification98.3%
(FPCore (u v t1)
:precision binary64
(let* ((t_1 (- (- u) t1)) (t_2 (/ v (+ t1 u))) (t_3 (* t1 (/ t_2 t_1))))
(if (<= t1 -1.16e+156)
(* t_2 (+ (/ u t1) -1.0))
(if (<= t1 -4.8e-126)
t_3
(if (<= t1 -1.15e-307)
(/ (/ t1 (/ u v)) t_1)
(if (<= t1 1.12e+105) t_3 (/ v t_1)))))))
double code(double u, double v, double t1) {
double t_1 = -u - t1;
double t_2 = v / (t1 + u);
double t_3 = t1 * (t_2 / t_1);
double tmp;
if (t1 <= -1.16e+156) {
tmp = t_2 * ((u / t1) + -1.0);
} else if (t1 <= -4.8e-126) {
tmp = t_3;
} else if (t1 <= -1.15e-307) {
tmp = (t1 / (u / v)) / t_1;
} else if (t1 <= 1.12e+105) {
tmp = t_3;
} else {
tmp = v / t_1;
}
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) :: t_1
real(8) :: t_2
real(8) :: t_3
real(8) :: tmp
t_1 = -u - t1
t_2 = v / (t1 + u)
t_3 = t1 * (t_2 / t_1)
if (t1 <= (-1.16d+156)) then
tmp = t_2 * ((u / t1) + (-1.0d0))
else if (t1 <= (-4.8d-126)) then
tmp = t_3
else if (t1 <= (-1.15d-307)) then
tmp = (t1 / (u / v)) / t_1
else if (t1 <= 1.12d+105) then
tmp = t_3
else
tmp = v / t_1
end if
code = tmp
end function
public static double code(double u, double v, double t1) {
double t_1 = -u - t1;
double t_2 = v / (t1 + u);
double t_3 = t1 * (t_2 / t_1);
double tmp;
if (t1 <= -1.16e+156) {
tmp = t_2 * ((u / t1) + -1.0);
} else if (t1 <= -4.8e-126) {
tmp = t_3;
} else if (t1 <= -1.15e-307) {
tmp = (t1 / (u / v)) / t_1;
} else if (t1 <= 1.12e+105) {
tmp = t_3;
} else {
tmp = v / t_1;
}
return tmp;
}
def code(u, v, t1): t_1 = -u - t1 t_2 = v / (t1 + u) t_3 = t1 * (t_2 / t_1) tmp = 0 if t1 <= -1.16e+156: tmp = t_2 * ((u / t1) + -1.0) elif t1 <= -4.8e-126: tmp = t_3 elif t1 <= -1.15e-307: tmp = (t1 / (u / v)) / t_1 elif t1 <= 1.12e+105: tmp = t_3 else: tmp = v / t_1 return tmp
function code(u, v, t1) t_1 = Float64(Float64(-u) - t1) t_2 = Float64(v / Float64(t1 + u)) t_3 = Float64(t1 * Float64(t_2 / t_1)) tmp = 0.0 if (t1 <= -1.16e+156) tmp = Float64(t_2 * Float64(Float64(u / t1) + -1.0)); elseif (t1 <= -4.8e-126) tmp = t_3; elseif (t1 <= -1.15e-307) tmp = Float64(Float64(t1 / Float64(u / v)) / t_1); elseif (t1 <= 1.12e+105) tmp = t_3; else tmp = Float64(v / t_1); end return tmp end
function tmp_2 = code(u, v, t1) t_1 = -u - t1; t_2 = v / (t1 + u); t_3 = t1 * (t_2 / t_1); tmp = 0.0; if (t1 <= -1.16e+156) tmp = t_2 * ((u / t1) + -1.0); elseif (t1 <= -4.8e-126) tmp = t_3; elseif (t1 <= -1.15e-307) tmp = (t1 / (u / v)) / t_1; elseif (t1 <= 1.12e+105) tmp = t_3; else tmp = v / t_1; end tmp_2 = tmp; end
code[u_, v_, t1_] := Block[{t$95$1 = N[((-u) - t1), $MachinePrecision]}, Block[{t$95$2 = N[(v / N[(t1 + u), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(t1 * N[(t$95$2 / t$95$1), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t1, -1.16e+156], N[(t$95$2 * N[(N[(u / t1), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t1, -4.8e-126], t$95$3, If[LessEqual[t1, -1.15e-307], N[(N[(t1 / N[(u / v), $MachinePrecision]), $MachinePrecision] / t$95$1), $MachinePrecision], If[LessEqual[t1, 1.12e+105], t$95$3, N[(v / t$95$1), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \left(-u\right) - t1\\
t_2 := \frac{v}{t1 + u}\\
t_3 := t1 \cdot \frac{t\_2}{t\_1}\\
\mathbf{if}\;t1 \leq -1.16 \cdot 10^{+156}:\\
\;\;\;\;t\_2 \cdot \left(\frac{u}{t1} + -1\right)\\
\mathbf{elif}\;t1 \leq -4.8 \cdot 10^{-126}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;t1 \leq -1.15 \cdot 10^{-307}:\\
\;\;\;\;\frac{\frac{t1}{\frac{u}{v}}}{t\_1}\\
\mathbf{elif}\;t1 \leq 1.12 \cdot 10^{+105}:\\
\;\;\;\;t\_3\\
\mathbf{else}:\\
\;\;\;\;\frac{v}{t\_1}\\
\end{array}
\end{array}
if t1 < -1.16e156Initial program 32.3%
times-frac100.0%
distribute-frac-neg100.0%
distribute-neg-frac2100.0%
+-commutative100.0%
distribute-neg-in100.0%
unsub-neg100.0%
Simplified100.0%
Taylor expanded in t1 around inf 91.5%
if -1.16e156 < t1 < -4.80000000000000014e-126 or -1.1499999999999999e-307 < t1 < 1.12e105Initial program 83.0%
associate-/l*85.5%
distribute-lft-neg-out85.5%
distribute-rgt-neg-in85.5%
associate-/r*93.8%
distribute-neg-frac293.8%
Simplified93.8%
if -4.80000000000000014e-126 < t1 < -1.1499999999999999e-307Initial program 85.1%
associate-/l*75.4%
distribute-lft-neg-out75.4%
distribute-rgt-neg-in75.4%
associate-/r*79.9%
distribute-neg-frac279.9%
Simplified79.9%
Taylor expanded in t1 around 0 77.4%
clear-num77.4%
un-div-inv77.5%
div-inv77.2%
add-sqr-sqrt46.6%
sqrt-unprod58.8%
sqr-neg58.8%
sqrt-unprod16.6%
add-sqr-sqrt37.8%
clear-num37.8%
Applied egg-rr37.8%
frac-2neg37.8%
distribute-frac-neg237.8%
add-sqr-sqrt37.8%
sqrt-unprod35.7%
sqr-neg35.7%
sqrt-unprod0.0%
add-sqr-sqrt77.4%
*-commutative77.4%
associate-/r*92.0%
Applied egg-rr92.0%
if 1.12e105 < t1 Initial program 53.3%
times-frac99.9%
distribute-frac-neg99.9%
distribute-neg-frac299.9%
+-commutative99.9%
distribute-neg-in99.9%
unsub-neg99.9%
Simplified99.9%
Taylor expanded in t1 around inf 93.5%
Final simplification93.2%
(FPCore (u v t1) :precision binary64 (if (or (<= t1 -1.35e-60) (not (<= t1 3.6e+71))) (/ v (- (- u) t1)) (* (/ t1 (- u)) (/ v u))))
double code(double u, double v, double t1) {
double tmp;
if ((t1 <= -1.35e-60) || !(t1 <= 3.6e+71)) {
tmp = v / (-u - t1);
} else {
tmp = (t1 / -u) * (v / u);
}
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 ((t1 <= (-1.35d-60)) .or. (.not. (t1 <= 3.6d+71))) then
tmp = v / (-u - t1)
else
tmp = (t1 / -u) * (v / u)
end if
code = tmp
end function
public static double code(double u, double v, double t1) {
double tmp;
if ((t1 <= -1.35e-60) || !(t1 <= 3.6e+71)) {
tmp = v / (-u - t1);
} else {
tmp = (t1 / -u) * (v / u);
}
return tmp;
}
def code(u, v, t1): tmp = 0 if (t1 <= -1.35e-60) or not (t1 <= 3.6e+71): tmp = v / (-u - t1) else: tmp = (t1 / -u) * (v / u) return tmp
function code(u, v, t1) tmp = 0.0 if ((t1 <= -1.35e-60) || !(t1 <= 3.6e+71)) tmp = Float64(v / Float64(Float64(-u) - t1)); else tmp = Float64(Float64(t1 / Float64(-u)) * Float64(v / u)); end return tmp end
function tmp_2 = code(u, v, t1) tmp = 0.0; if ((t1 <= -1.35e-60) || ~((t1 <= 3.6e+71))) tmp = v / (-u - t1); else tmp = (t1 / -u) * (v / u); end tmp_2 = tmp; end
code[u_, v_, t1_] := If[Or[LessEqual[t1, -1.35e-60], N[Not[LessEqual[t1, 3.6e+71]], $MachinePrecision]], N[(v / N[((-u) - t1), $MachinePrecision]), $MachinePrecision], N[(N[(t1 / (-u)), $MachinePrecision] * N[(v / u), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;t1 \leq -1.35 \cdot 10^{-60} \lor \neg \left(t1 \leq 3.6 \cdot 10^{+71}\right):\\
\;\;\;\;\frac{v}{\left(-u\right) - t1}\\
\mathbf{else}:\\
\;\;\;\;\frac{t1}{-u} \cdot \frac{v}{u}\\
\end{array}
\end{array}
if t1 < -1.35e-60 or 3.6e71 < t1 Initial program 53.0%
times-frac99.9%
distribute-frac-neg99.9%
distribute-neg-frac299.9%
+-commutative99.9%
distribute-neg-in99.9%
unsub-neg99.9%
Simplified99.9%
Taylor expanded in t1 around inf 84.8%
if -1.35e-60 < t1 < 3.6e71Initial program 88.2%
times-frac97.0%
distribute-frac-neg97.0%
distribute-neg-frac297.0%
+-commutative97.0%
distribute-neg-in97.0%
unsub-neg97.0%
Simplified97.0%
Taylor expanded in t1 around 0 77.5%
associate-*r/77.5%
mul-1-neg77.5%
Simplified77.5%
Taylor expanded in t1 around 0 80.7%
Final simplification82.6%
(FPCore (u v t1) :precision binary64 (if (<= t1 -3.2e-60) (* (/ v (+ t1 u)) (+ (/ u t1) -1.0)) (if (<= t1 3.7e+71) (* (/ t1 (- u)) (/ v u)) (/ v (- (- u) t1)))))
double code(double u, double v, double t1) {
double tmp;
if (t1 <= -3.2e-60) {
tmp = (v / (t1 + u)) * ((u / t1) + -1.0);
} else if (t1 <= 3.7e+71) {
tmp = (t1 / -u) * (v / u);
} else {
tmp = v / (-u - 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 (t1 <= (-3.2d-60)) then
tmp = (v / (t1 + u)) * ((u / t1) + (-1.0d0))
else if (t1 <= 3.7d+71) then
tmp = (t1 / -u) * (v / u)
else
tmp = v / (-u - t1)
end if
code = tmp
end function
public static double code(double u, double v, double t1) {
double tmp;
if (t1 <= -3.2e-60) {
tmp = (v / (t1 + u)) * ((u / t1) + -1.0);
} else if (t1 <= 3.7e+71) {
tmp = (t1 / -u) * (v / u);
} else {
tmp = v / (-u - t1);
}
return tmp;
}
def code(u, v, t1): tmp = 0 if t1 <= -3.2e-60: tmp = (v / (t1 + u)) * ((u / t1) + -1.0) elif t1 <= 3.7e+71: tmp = (t1 / -u) * (v / u) else: tmp = v / (-u - t1) return tmp
function code(u, v, t1) tmp = 0.0 if (t1 <= -3.2e-60) tmp = Float64(Float64(v / Float64(t1 + u)) * Float64(Float64(u / t1) + -1.0)); elseif (t1 <= 3.7e+71) tmp = Float64(Float64(t1 / Float64(-u)) * Float64(v / u)); else tmp = Float64(v / Float64(Float64(-u) - t1)); end return tmp end
function tmp_2 = code(u, v, t1) tmp = 0.0; if (t1 <= -3.2e-60) tmp = (v / (t1 + u)) * ((u / t1) + -1.0); elseif (t1 <= 3.7e+71) tmp = (t1 / -u) * (v / u); else tmp = v / (-u - t1); end tmp_2 = tmp; end
code[u_, v_, t1_] := If[LessEqual[t1, -3.2e-60], N[(N[(v / N[(t1 + u), $MachinePrecision]), $MachinePrecision] * N[(N[(u / t1), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t1, 3.7e+71], N[(N[(t1 / (-u)), $MachinePrecision] * N[(v / u), $MachinePrecision]), $MachinePrecision], N[(v / N[((-u) - t1), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;t1 \leq -3.2 \cdot 10^{-60}:\\
\;\;\;\;\frac{v}{t1 + u} \cdot \left(\frac{u}{t1} + -1\right)\\
\mathbf{elif}\;t1 \leq 3.7 \cdot 10^{+71}:\\
\;\;\;\;\frac{t1}{-u} \cdot \frac{v}{u}\\
\mathbf{else}:\\
\;\;\;\;\frac{v}{\left(-u\right) - t1}\\
\end{array}
\end{array}
if t1 < -3.2000000000000001e-60Initial program 55.1%
times-frac99.9%
distribute-frac-neg99.9%
distribute-neg-frac299.9%
+-commutative99.9%
distribute-neg-in99.9%
unsub-neg99.9%
Simplified99.9%
Taylor expanded in t1 around inf 82.2%
if -3.2000000000000001e-60 < t1 < 3.7e71Initial program 88.2%
times-frac97.0%
distribute-frac-neg97.0%
distribute-neg-frac297.0%
+-commutative97.0%
distribute-neg-in97.0%
unsub-neg97.0%
Simplified97.0%
Taylor expanded in t1 around 0 77.5%
associate-*r/77.5%
mul-1-neg77.5%
Simplified77.5%
Taylor expanded in t1 around 0 80.7%
if 3.7e71 < t1 Initial program 50.1%
times-frac99.8%
distribute-frac-neg99.8%
distribute-neg-frac299.8%
+-commutative99.8%
distribute-neg-in99.8%
unsub-neg99.8%
Simplified99.8%
Taylor expanded in t1 around inf 88.6%
Final simplification82.7%
(FPCore (u v t1) :precision binary64 (if (or (<= t1 -9.5e-139) (not (<= t1 3.1e-168))) (/ v (- (- u) t1)) (* v (/ (/ t1 u) t1))))
double code(double u, double v, double t1) {
double tmp;
if ((t1 <= -9.5e-139) || !(t1 <= 3.1e-168)) {
tmp = v / (-u - t1);
} else {
tmp = v * ((t1 / u) / 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 ((t1 <= (-9.5d-139)) .or. (.not. (t1 <= 3.1d-168))) then
tmp = v / (-u - t1)
else
tmp = v * ((t1 / u) / t1)
end if
code = tmp
end function
public static double code(double u, double v, double t1) {
double tmp;
if ((t1 <= -9.5e-139) || !(t1 <= 3.1e-168)) {
tmp = v / (-u - t1);
} else {
tmp = v * ((t1 / u) / t1);
}
return tmp;
}
def code(u, v, t1): tmp = 0 if (t1 <= -9.5e-139) or not (t1 <= 3.1e-168): tmp = v / (-u - t1) else: tmp = v * ((t1 / u) / t1) return tmp
function code(u, v, t1) tmp = 0.0 if ((t1 <= -9.5e-139) || !(t1 <= 3.1e-168)) tmp = Float64(v / Float64(Float64(-u) - t1)); else tmp = Float64(v * Float64(Float64(t1 / u) / t1)); end return tmp end
function tmp_2 = code(u, v, t1) tmp = 0.0; if ((t1 <= -9.5e-139) || ~((t1 <= 3.1e-168))) tmp = v / (-u - t1); else tmp = v * ((t1 / u) / t1); end tmp_2 = tmp; end
code[u_, v_, t1_] := If[Or[LessEqual[t1, -9.5e-139], N[Not[LessEqual[t1, 3.1e-168]], $MachinePrecision]], N[(v / N[((-u) - t1), $MachinePrecision]), $MachinePrecision], N[(v * N[(N[(t1 / u), $MachinePrecision] / t1), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;t1 \leq -9.5 \cdot 10^{-139} \lor \neg \left(t1 \leq 3.1 \cdot 10^{-168}\right):\\
\;\;\;\;\frac{v}{\left(-u\right) - t1}\\
\mathbf{else}:\\
\;\;\;\;v \cdot \frac{\frac{t1}{u}}{t1}\\
\end{array}
\end{array}
if t1 < -9.5000000000000006e-139 or 3.1e-168 < t1 Initial program 67.7%
times-frac99.9%
distribute-frac-neg99.9%
distribute-neg-frac299.9%
+-commutative99.9%
distribute-neg-in99.9%
unsub-neg99.9%
Simplified99.9%
Taylor expanded in t1 around inf 71.4%
if -9.5000000000000006e-139 < t1 < 3.1e-168Initial program 83.2%
associate-/l*79.7%
distribute-lft-neg-out79.7%
distribute-rgt-neg-in79.7%
associate-/r*83.7%
distribute-neg-frac283.7%
Simplified83.7%
Taylor expanded in t1 around 0 80.5%
Taylor expanded in u around 0 14.7%
mul-1-neg14.7%
associate-/r*14.7%
distribute-neg-frac214.7%
Simplified14.7%
clear-num14.7%
un-div-inv14.7%
div-inv14.7%
add-sqr-sqrt7.6%
sqrt-unprod22.3%
sqr-neg22.3%
sqrt-unprod9.2%
add-sqr-sqrt18.0%
clear-num18.0%
Applied egg-rr18.0%
associate-/r*28.1%
associate-/r/40.7%
Applied egg-rr40.7%
Final simplification63.6%
(FPCore (u v t1) :precision binary64 (if (<= u 3.1e+152) (/ v (- t1)) (/ v u)))
double code(double u, double v, double t1) {
double tmp;
if (u <= 3.1e+152) {
tmp = v / -t1;
} else {
tmp = v / u;
}
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.1d+152) then
tmp = v / -t1
else
tmp = v / u
end if
code = tmp
end function
public static double code(double u, double v, double t1) {
double tmp;
if (u <= 3.1e+152) {
tmp = v / -t1;
} else {
tmp = v / u;
}
return tmp;
}
def code(u, v, t1): tmp = 0 if u <= 3.1e+152: tmp = v / -t1 else: tmp = v / u return tmp
function code(u, v, t1) tmp = 0.0 if (u <= 3.1e+152) tmp = Float64(v / Float64(-t1)); else tmp = Float64(v / u); end return tmp end
function tmp_2 = code(u, v, t1) tmp = 0.0; if (u <= 3.1e+152) tmp = v / -t1; else tmp = v / u; end tmp_2 = tmp; end
code[u_, v_, t1_] := If[LessEqual[u, 3.1e+152], N[(v / (-t1)), $MachinePrecision], N[(v / u), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;u \leq 3.1 \cdot 10^{+152}:\\
\;\;\;\;\frac{v}{-t1}\\
\mathbf{else}:\\
\;\;\;\;\frac{v}{u}\\
\end{array}
\end{array}
if u < 3.1e152Initial program 70.1%
associate-/l*70.2%
distribute-lft-neg-out70.2%
distribute-rgt-neg-in70.2%
associate-/r*81.2%
distribute-neg-frac281.2%
Simplified81.2%
Taylor expanded in t1 around inf 56.7%
associate-*r/56.7%
neg-mul-156.7%
Simplified56.7%
if 3.1e152 < u Initial program 80.8%
associate-/l*81.0%
distribute-lft-neg-out81.0%
distribute-rgt-neg-in81.0%
associate-/r*86.4%
distribute-neg-frac286.4%
Simplified86.4%
Taylor expanded in t1 around 0 86.5%
Taylor expanded in u around 0 51.0%
mul-1-neg51.0%
associate-/r*50.7%
distribute-neg-frac250.7%
Simplified50.7%
clear-num50.7%
un-div-inv50.7%
div-inv50.7%
add-sqr-sqrt0.0%
sqrt-unprod64.0%
sqr-neg64.0%
sqrt-unprod50.6%
add-sqr-sqrt50.6%
clear-num50.6%
Applied egg-rr50.6%
Taylor expanded in t1 around 0 40.6%
Final simplification54.5%
(FPCore (u v t1) :precision binary64 (/ v (- (- u) t1)))
double code(double u, double v, double t1) {
return v / (-u - 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 / (-u - t1)
end function
public static double code(double u, double v, double t1) {
return v / (-u - t1);
}
def code(u, v, t1): return v / (-u - t1)
function code(u, v, t1) return Float64(v / Float64(Float64(-u) - t1)) end
function tmp = code(u, v, t1) tmp = v / (-u - t1); end
code[u_, v_, t1_] := N[(v / N[((-u) - t1), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{v}{\left(-u\right) - t1}
\end{array}
Initial program 71.6%
times-frac98.3%
distribute-frac-neg98.3%
distribute-neg-frac298.3%
+-commutative98.3%
distribute-neg-in98.3%
unsub-neg98.3%
Simplified98.3%
Taylor expanded in t1 around inf 58.7%
Final simplification58.7%
(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 71.6%
associate-/l*71.7%
distribute-lft-neg-out71.7%
distribute-rgt-neg-in71.7%
associate-/r*81.9%
distribute-neg-frac281.9%
Simplified81.9%
Taylor expanded in t1 around 0 53.5%
Taylor expanded in u around 0 20.7%
mul-1-neg20.7%
associate-/r*22.3%
distribute-neg-frac222.3%
Simplified22.3%
clear-num22.3%
un-div-inv22.3%
div-inv22.5%
add-sqr-sqrt10.3%
sqrt-unprod26.7%
sqr-neg26.7%
sqrt-unprod12.8%
add-sqr-sqrt23.5%
clear-num23.5%
Applied egg-rr23.5%
Taylor expanded in t1 around 0 16.6%
Final simplification16.6%
herbie shell --seed 2024054
(FPCore (u v t1)
:name "Rosa's DopplerBench"
:precision binary64
(/ (* (- t1) v) (* (+ t1 u) (+ t1 u))))