
(FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (let* ((t_0 (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))))) (* R (sqrt (+ (* t_0 t_0) (* (- phi1 phi2) (- phi1 phi2)))))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0));
return R * sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))));
}
real(8) function code(r, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: t_0
t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0d0))
code = r * sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))))
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = (lambda1 - lambda2) * Math.cos(((phi1 + phi2) / 2.0));
return R * Math.sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))));
}
def code(R, lambda1, lambda2, phi1, phi2): t_0 = (lambda1 - lambda2) * math.cos(((phi1 + phi2) / 2.0)) return R * math.sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))))
function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(Float64(lambda1 - lambda2) * cos(Float64(Float64(phi1 + phi2) / 2.0))) return Float64(R * sqrt(Float64(Float64(t_0 * t_0) + Float64(Float64(phi1 - phi2) * Float64(phi1 - phi2))))) end
function tmp = code(R, lambda1, lambda2, phi1, phi2) t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0)); tmp = R * sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2)))); end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[(lambda1 - lambda2), $MachinePrecision] * N[Cos[N[(N[(phi1 + phi2), $MachinePrecision] / 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, N[(R * N[Sqrt[N[(N[(t$95$0 * t$95$0), $MachinePrecision] + N[(N[(phi1 - phi2), $MachinePrecision] * N[(phi1 - phi2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\\
R \cdot \sqrt{t\_0 \cdot t\_0 + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}
\end{array}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 9 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (let* ((t_0 (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))))) (* R (sqrt (+ (* t_0 t_0) (* (- phi1 phi2) (- phi1 phi2)))))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0));
return R * sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))));
}
real(8) function code(r, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: t_0
t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0d0))
code = r * sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))))
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = (lambda1 - lambda2) * Math.cos(((phi1 + phi2) / 2.0));
return R * Math.sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))));
}
def code(R, lambda1, lambda2, phi1, phi2): t_0 = (lambda1 - lambda2) * math.cos(((phi1 + phi2) / 2.0)) return R * math.sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))))
function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(Float64(lambda1 - lambda2) * cos(Float64(Float64(phi1 + phi2) / 2.0))) return Float64(R * sqrt(Float64(Float64(t_0 * t_0) + Float64(Float64(phi1 - phi2) * Float64(phi1 - phi2))))) end
function tmp = code(R, lambda1, lambda2, phi1, phi2) t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0)); tmp = R * sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2)))); end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[(lambda1 - lambda2), $MachinePrecision] * N[Cos[N[(N[(phi1 + phi2), $MachinePrecision] / 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, N[(R * N[Sqrt[N[(N[(t$95$0 * t$95$0), $MachinePrecision] + N[(N[(phi1 - phi2), $MachinePrecision] * N[(phi1 - phi2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\\
R \cdot \sqrt{t\_0 \cdot t\_0 + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}
\end{array}
\end{array}
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))))
(if (<= (- lambda1 lambda2) 2.1e+139)
(* R (sqrt (+ (* t_0 t_0) (* (- phi1 phi2) (- phi1 phi2)))))
(* R (- lambda1 lambda2)))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0));
double tmp;
if ((lambda1 - lambda2) <= 2.1e+139) {
tmp = R * sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))));
} else {
tmp = R * (lambda1 - lambda2);
}
return tmp;
}
real(8) function code(r, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: t_0
real(8) :: tmp
t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0d0))
if ((lambda1 - lambda2) <= 2.1d+139) then
tmp = r * sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))))
else
tmp = r * (lambda1 - lambda2)
end if
code = tmp
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = (lambda1 - lambda2) * Math.cos(((phi1 + phi2) / 2.0));
double tmp;
if ((lambda1 - lambda2) <= 2.1e+139) {
tmp = R * Math.sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))));
} else {
tmp = R * (lambda1 - lambda2);
}
return tmp;
}
def code(R, lambda1, lambda2, phi1, phi2): t_0 = (lambda1 - lambda2) * math.cos(((phi1 + phi2) / 2.0)) tmp = 0 if (lambda1 - lambda2) <= 2.1e+139: tmp = R * math.sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2)))) else: tmp = R * (lambda1 - lambda2) return tmp
function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(Float64(lambda1 - lambda2) * cos(Float64(Float64(phi1 + phi2) / 2.0))) tmp = 0.0 if (Float64(lambda1 - lambda2) <= 2.1e+139) tmp = Float64(R * sqrt(Float64(Float64(t_0 * t_0) + Float64(Float64(phi1 - phi2) * Float64(phi1 - phi2))))); else tmp = Float64(R * Float64(lambda1 - lambda2)); end return tmp end
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2) t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0)); tmp = 0.0; if ((lambda1 - lambda2) <= 2.1e+139) tmp = R * sqrt(((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2)))); else tmp = R * (lambda1 - lambda2); end tmp_2 = tmp; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[(lambda1 - lambda2), $MachinePrecision] * N[Cos[N[(N[(phi1 + phi2), $MachinePrecision] / 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[N[(lambda1 - lambda2), $MachinePrecision], 2.1e+139], N[(R * N[Sqrt[N[(N[(t$95$0 * t$95$0), $MachinePrecision] + N[(N[(phi1 - phi2), $MachinePrecision] * N[(phi1 - phi2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(R * N[(lambda1 - lambda2), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\\
\mathbf{if}\;\lambda_1 - \lambda_2 \leq 2.1 \cdot 10^{+139}:\\
\;\;\;\;R \cdot \sqrt{t\_0 \cdot t\_0 + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\\
\mathbf{else}:\\
\;\;\;\;R \cdot \left(\lambda_1 - \lambda_2\right)\\
\end{array}
\end{array}
if (-.f64 lambda1 lambda2) < 2.0999999999999999e139Initial program 67.3%
if 2.0999999999999999e139 < (-.f64 lambda1 lambda2) Initial program 39.0%
Taylor expanded in lambda1 around 0
Applied rewrites47.9%
Taylor expanded in lambda1 around 0
Applied rewrites37.2%
Taylor expanded in lambda1 around 0
Applied rewrites59.4%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))))
(if (<= (- lambda1 lambda2) -1.1e-12)
(* R (+ (* t_0 t_0) (* (- phi1 phi2) (- phi1 phi2))))
(if (<= (- lambda1 lambda2) 4e-50)
(* R (+ phi1 phi2))
(* R (- lambda1 lambda2))))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0));
double tmp;
if ((lambda1 - lambda2) <= -1.1e-12) {
tmp = R * ((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2)));
} else if ((lambda1 - lambda2) <= 4e-50) {
tmp = R * (phi1 + phi2);
} else {
tmp = R * (lambda1 - lambda2);
}
return tmp;
}
real(8) function code(r, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: t_0
real(8) :: tmp
t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0d0))
if ((lambda1 - lambda2) <= (-1.1d-12)) then
tmp = r * ((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2)))
else if ((lambda1 - lambda2) <= 4d-50) then
tmp = r * (phi1 + phi2)
else
tmp = r * (lambda1 - lambda2)
end if
code = tmp
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = (lambda1 - lambda2) * Math.cos(((phi1 + phi2) / 2.0));
double tmp;
if ((lambda1 - lambda2) <= -1.1e-12) {
tmp = R * ((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2)));
} else if ((lambda1 - lambda2) <= 4e-50) {
tmp = R * (phi1 + phi2);
} else {
tmp = R * (lambda1 - lambda2);
}
return tmp;
}
def code(R, lambda1, lambda2, phi1, phi2): t_0 = (lambda1 - lambda2) * math.cos(((phi1 + phi2) / 2.0)) tmp = 0 if (lambda1 - lambda2) <= -1.1e-12: tmp = R * ((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))) elif (lambda1 - lambda2) <= 4e-50: tmp = R * (phi1 + phi2) else: tmp = R * (lambda1 - lambda2) return tmp
function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(Float64(lambda1 - lambda2) * cos(Float64(Float64(phi1 + phi2) / 2.0))) tmp = 0.0 if (Float64(lambda1 - lambda2) <= -1.1e-12) tmp = Float64(R * Float64(Float64(t_0 * t_0) + Float64(Float64(phi1 - phi2) * Float64(phi1 - phi2)))); elseif (Float64(lambda1 - lambda2) <= 4e-50) tmp = Float64(R * Float64(phi1 + phi2)); else tmp = Float64(R * Float64(lambda1 - lambda2)); end return tmp end
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2) t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0)); tmp = 0.0; if ((lambda1 - lambda2) <= -1.1e-12) tmp = R * ((t_0 * t_0) + ((phi1 - phi2) * (phi1 - phi2))); elseif ((lambda1 - lambda2) <= 4e-50) tmp = R * (phi1 + phi2); else tmp = R * (lambda1 - lambda2); end tmp_2 = tmp; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[(lambda1 - lambda2), $MachinePrecision] * N[Cos[N[(N[(phi1 + phi2), $MachinePrecision] / 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[N[(lambda1 - lambda2), $MachinePrecision], -1.1e-12], N[(R * N[(N[(t$95$0 * t$95$0), $MachinePrecision] + N[(N[(phi1 - phi2), $MachinePrecision] * N[(phi1 - phi2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[N[(lambda1 - lambda2), $MachinePrecision], 4e-50], N[(R * N[(phi1 + phi2), $MachinePrecision]), $MachinePrecision], N[(R * N[(lambda1 - lambda2), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\\
\mathbf{if}\;\lambda_1 - \lambda_2 \leq -1.1 \cdot 10^{-12}:\\
\;\;\;\;R \cdot \left(t\_0 \cdot t\_0 + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)\right)\\
\mathbf{elif}\;\lambda_1 - \lambda_2 \leq 4 \cdot 10^{-50}:\\
\;\;\;\;R \cdot \left(\phi_1 + \phi_2\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \left(\lambda_1 - \lambda_2\right)\\
\end{array}
\end{array}
if (-.f64 lambda1 lambda2) < -1.09999999999999996e-12Initial program 58.7%
Taylor expanded in lambda1 around 0
Applied rewrites17.2%
Taylor expanded in lambda1 around 0
Applied rewrites43.7%
if -1.09999999999999996e-12 < (-.f64 lambda1 lambda2) < 4.00000000000000003e-50Initial program 68.6%
Taylor expanded in lambda1 around 0
Applied rewrites6.6%
Taylor expanded in lambda1 around 0
Applied rewrites50.5%
if 4.00000000000000003e-50 < (-.f64 lambda1 lambda2) Initial program 57.6%
Taylor expanded in lambda1 around 0
Applied rewrites43.4%
Taylor expanded in lambda1 around 0
Applied rewrites32.7%
Taylor expanded in lambda1 around 0
Applied rewrites50.9%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))))
(if (<= (- lambda1 lambda2) -1.35e+124)
(* R (* t_0 t_0))
(if (<= (- lambda1 lambda2) 4e-50)
(* R (+ phi1 phi2))
(* R (- lambda1 lambda2))))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0));
double tmp;
if ((lambda1 - lambda2) <= -1.35e+124) {
tmp = R * (t_0 * t_0);
} else if ((lambda1 - lambda2) <= 4e-50) {
tmp = R * (phi1 + phi2);
} else {
tmp = R * (lambda1 - lambda2);
}
return tmp;
}
real(8) function code(r, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: t_0
real(8) :: tmp
t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0d0))
if ((lambda1 - lambda2) <= (-1.35d+124)) then
tmp = r * (t_0 * t_0)
else if ((lambda1 - lambda2) <= 4d-50) then
tmp = r * (phi1 + phi2)
else
tmp = r * (lambda1 - lambda2)
end if
code = tmp
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = (lambda1 - lambda2) * Math.cos(((phi1 + phi2) / 2.0));
double tmp;
if ((lambda1 - lambda2) <= -1.35e+124) {
tmp = R * (t_0 * t_0);
} else if ((lambda1 - lambda2) <= 4e-50) {
tmp = R * (phi1 + phi2);
} else {
tmp = R * (lambda1 - lambda2);
}
return tmp;
}
def code(R, lambda1, lambda2, phi1, phi2): t_0 = (lambda1 - lambda2) * math.cos(((phi1 + phi2) / 2.0)) tmp = 0 if (lambda1 - lambda2) <= -1.35e+124: tmp = R * (t_0 * t_0) elif (lambda1 - lambda2) <= 4e-50: tmp = R * (phi1 + phi2) else: tmp = R * (lambda1 - lambda2) return tmp
function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(Float64(lambda1 - lambda2) * cos(Float64(Float64(phi1 + phi2) / 2.0))) tmp = 0.0 if (Float64(lambda1 - lambda2) <= -1.35e+124) tmp = Float64(R * Float64(t_0 * t_0)); elseif (Float64(lambda1 - lambda2) <= 4e-50) tmp = Float64(R * Float64(phi1 + phi2)); else tmp = Float64(R * Float64(lambda1 - lambda2)); end return tmp end
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2) t_0 = (lambda1 - lambda2) * cos(((phi1 + phi2) / 2.0)); tmp = 0.0; if ((lambda1 - lambda2) <= -1.35e+124) tmp = R * (t_0 * t_0); elseif ((lambda1 - lambda2) <= 4e-50) tmp = R * (phi1 + phi2); else tmp = R * (lambda1 - lambda2); end tmp_2 = tmp; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[(lambda1 - lambda2), $MachinePrecision] * N[Cos[N[(N[(phi1 + phi2), $MachinePrecision] / 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[N[(lambda1 - lambda2), $MachinePrecision], -1.35e+124], N[(R * N[(t$95$0 * t$95$0), $MachinePrecision]), $MachinePrecision], If[LessEqual[N[(lambda1 - lambda2), $MachinePrecision], 4e-50], N[(R * N[(phi1 + phi2), $MachinePrecision]), $MachinePrecision], N[(R * N[(lambda1 - lambda2), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\\
\mathbf{if}\;\lambda_1 - \lambda_2 \leq -1.35 \cdot 10^{+124}:\\
\;\;\;\;R \cdot \left(t\_0 \cdot t\_0\right)\\
\mathbf{elif}\;\lambda_1 - \lambda_2 \leq 4 \cdot 10^{-50}:\\
\;\;\;\;R \cdot \left(\phi_1 + \phi_2\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \left(\lambda_1 - \lambda_2\right)\\
\end{array}
\end{array}
if (-.f64 lambda1 lambda2) < -1.34999999999999989e124Initial program 53.4%
Taylor expanded in lambda1 around 0
Applied rewrites22.2%
Taylor expanded in lambda1 around 0
Applied rewrites47.7%
if -1.34999999999999989e124 < (-.f64 lambda1 lambda2) < 4.00000000000000003e-50Initial program 69.3%
Taylor expanded in lambda1 around 0
Applied rewrites6.5%
Taylor expanded in lambda1 around 0
Applied rewrites43.6%
if 4.00000000000000003e-50 < (-.f64 lambda1 lambda2) Initial program 57.6%
Taylor expanded in lambda1 around 0
Applied rewrites43.4%
Taylor expanded in lambda1 around 0
Applied rewrites32.7%
Taylor expanded in lambda1 around 0
Applied rewrites50.9%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (/ (+ phi1 phi2) 2.0)))
(if (<= phi2 -7.5e+54)
(* R (* R t_0))
(if (<= phi2 3.8e-45)
(* R (* (- lambda1 lambda2) (cos t_0)))
(* R (+ phi1 phi2))))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = (phi1 + phi2) / 2.0;
double tmp;
if (phi2 <= -7.5e+54) {
tmp = R * (R * t_0);
} else if (phi2 <= 3.8e-45) {
tmp = R * ((lambda1 - lambda2) * cos(t_0));
} else {
tmp = R * (phi1 + phi2);
}
return tmp;
}
real(8) function code(r, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: t_0
real(8) :: tmp
t_0 = (phi1 + phi2) / 2.0d0
if (phi2 <= (-7.5d+54)) then
tmp = r * (r * t_0)
else if (phi2 <= 3.8d-45) then
tmp = r * ((lambda1 - lambda2) * cos(t_0))
else
tmp = r * (phi1 + phi2)
end if
code = tmp
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = (phi1 + phi2) / 2.0;
double tmp;
if (phi2 <= -7.5e+54) {
tmp = R * (R * t_0);
} else if (phi2 <= 3.8e-45) {
tmp = R * ((lambda1 - lambda2) * Math.cos(t_0));
} else {
tmp = R * (phi1 + phi2);
}
return tmp;
}
def code(R, lambda1, lambda2, phi1, phi2): t_0 = (phi1 + phi2) / 2.0 tmp = 0 if phi2 <= -7.5e+54: tmp = R * (R * t_0) elif phi2 <= 3.8e-45: tmp = R * ((lambda1 - lambda2) * math.cos(t_0)) else: tmp = R * (phi1 + phi2) return tmp
function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(Float64(phi1 + phi2) / 2.0) tmp = 0.0 if (phi2 <= -7.5e+54) tmp = Float64(R * Float64(R * t_0)); elseif (phi2 <= 3.8e-45) tmp = Float64(R * Float64(Float64(lambda1 - lambda2) * cos(t_0))); else tmp = Float64(R * Float64(phi1 + phi2)); end return tmp end
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2) t_0 = (phi1 + phi2) / 2.0; tmp = 0.0; if (phi2 <= -7.5e+54) tmp = R * (R * t_0); elseif (phi2 <= 3.8e-45) tmp = R * ((lambda1 - lambda2) * cos(t_0)); else tmp = R * (phi1 + phi2); end tmp_2 = tmp; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(N[(phi1 + phi2), $MachinePrecision] / 2.0), $MachinePrecision]}, If[LessEqual[phi2, -7.5e+54], N[(R * N[(R * t$95$0), $MachinePrecision]), $MachinePrecision], If[LessEqual[phi2, 3.8e-45], N[(R * N[(N[(lambda1 - lambda2), $MachinePrecision] * N[Cos[t$95$0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(R * N[(phi1 + phi2), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\phi_1 + \phi_2}{2}\\
\mathbf{if}\;\phi_2 \leq -7.5 \cdot 10^{+54}:\\
\;\;\;\;R \cdot \left(R \cdot t\_0\right)\\
\mathbf{elif}\;\phi_2 \leq 3.8 \cdot 10^{-45}:\\
\;\;\;\;R \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos t\_0\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \left(\phi_1 + \phi_2\right)\\
\end{array}
\end{array}
if phi2 < -7.50000000000000042e54Initial program 50.7%
Taylor expanded in lambda1 around 0
Applied rewrites13.1%
Taylor expanded in lambda1 around 0
Applied rewrites39.8%
Taylor expanded in lambda1 around 0
Applied rewrites25.2%
if -7.50000000000000042e54 < phi2 < 3.79999999999999997e-45Initial program 68.6%
Taylor expanded in lambda1 around 0
Applied rewrites41.1%
if 3.79999999999999997e-45 < phi2 Initial program 51.0%
Taylor expanded in lambda1 around 0
Applied rewrites11.1%
Taylor expanded in lambda1 around 0
Applied rewrites58.4%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(if (<= (- lambda1 lambda2) -3.8e+154)
(* R (* R (/ (+ phi1 phi2) 2.0)))
(if (<= (- lambda1 lambda2) 4e-50)
(* R (+ phi1 phi2))
(* R (- lambda1 lambda2)))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if ((lambda1 - lambda2) <= -3.8e+154) {
tmp = R * (R * ((phi1 + phi2) / 2.0));
} else if ((lambda1 - lambda2) <= 4e-50) {
tmp = R * (phi1 + phi2);
} else {
tmp = R * (lambda1 - lambda2);
}
return tmp;
}
real(8) function code(r, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: tmp
if ((lambda1 - lambda2) <= (-3.8d+154)) then
tmp = r * (r * ((phi1 + phi2) / 2.0d0))
else if ((lambda1 - lambda2) <= 4d-50) then
tmp = r * (phi1 + phi2)
else
tmp = r * (lambda1 - lambda2)
end if
code = tmp
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if ((lambda1 - lambda2) <= -3.8e+154) {
tmp = R * (R * ((phi1 + phi2) / 2.0));
} else if ((lambda1 - lambda2) <= 4e-50) {
tmp = R * (phi1 + phi2);
} else {
tmp = R * (lambda1 - lambda2);
}
return tmp;
}
def code(R, lambda1, lambda2, phi1, phi2): tmp = 0 if (lambda1 - lambda2) <= -3.8e+154: tmp = R * (R * ((phi1 + phi2) / 2.0)) elif (lambda1 - lambda2) <= 4e-50: tmp = R * (phi1 + phi2) else: tmp = R * (lambda1 - lambda2) return tmp
function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (Float64(lambda1 - lambda2) <= -3.8e+154) tmp = Float64(R * Float64(R * Float64(Float64(phi1 + phi2) / 2.0))); elseif (Float64(lambda1 - lambda2) <= 4e-50) tmp = Float64(R * Float64(phi1 + phi2)); else tmp = Float64(R * Float64(lambda1 - lambda2)); end return tmp end
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0; if ((lambda1 - lambda2) <= -3.8e+154) tmp = R * (R * ((phi1 + phi2) / 2.0)); elseif ((lambda1 - lambda2) <= 4e-50) tmp = R * (phi1 + phi2); else tmp = R * (lambda1 - lambda2); end tmp_2 = tmp; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[N[(lambda1 - lambda2), $MachinePrecision], -3.8e+154], N[(R * N[(R * N[(N[(phi1 + phi2), $MachinePrecision] / 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[N[(lambda1 - lambda2), $MachinePrecision], 4e-50], N[(R * N[(phi1 + phi2), $MachinePrecision]), $MachinePrecision], N[(R * N[(lambda1 - lambda2), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\lambda_1 - \lambda_2 \leq -3.8 \cdot 10^{+154}:\\
\;\;\;\;R \cdot \left(R \cdot \frac{\phi_1 + \phi_2}{2}\right)\\
\mathbf{elif}\;\lambda_1 - \lambda_2 \leq 4 \cdot 10^{-50}:\\
\;\;\;\;R \cdot \left(\phi_1 + \phi_2\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \left(\lambda_1 - \lambda_2\right)\\
\end{array}
\end{array}
if (-.f64 lambda1 lambda2) < -3.7999999999999998e154Initial program 48.9%
Taylor expanded in lambda1 around 0
Applied rewrites19.7%
Taylor expanded in lambda1 around 0
Applied rewrites48.9%
Taylor expanded in lambda1 around 0
Applied rewrites28.2%
if -3.7999999999999998e154 < (-.f64 lambda1 lambda2) < 4.00000000000000003e-50Initial program 69.5%
Taylor expanded in lambda1 around 0
Applied rewrites10.2%
Taylor expanded in lambda1 around 0
Applied rewrites39.7%
if 4.00000000000000003e-50 < (-.f64 lambda1 lambda2) Initial program 57.6%
Taylor expanded in lambda1 around 0
Applied rewrites43.4%
Taylor expanded in lambda1 around 0
Applied rewrites32.7%
Taylor expanded in lambda1 around 0
Applied rewrites50.9%
(FPCore (R lambda1 lambda2 phi1 phi2)
:precision binary64
(let* ((t_0 (* R (- lambda1 lambda2))))
(if (<= (- lambda1 lambda2) -7.2e+192)
(* R t_0)
(if (<= (- lambda1 lambda2) 4e-50) (* R (+ phi1 phi2)) t_0))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = R * (lambda1 - lambda2);
double tmp;
if ((lambda1 - lambda2) <= -7.2e+192) {
tmp = R * t_0;
} else if ((lambda1 - lambda2) <= 4e-50) {
tmp = R * (phi1 + phi2);
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(r, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: t_0
real(8) :: tmp
t_0 = r * (lambda1 - lambda2)
if ((lambda1 - lambda2) <= (-7.2d+192)) then
tmp = r * t_0
else if ((lambda1 - lambda2) <= 4d-50) then
tmp = r * (phi1 + phi2)
else
tmp = t_0
end if
code = tmp
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double t_0 = R * (lambda1 - lambda2);
double tmp;
if ((lambda1 - lambda2) <= -7.2e+192) {
tmp = R * t_0;
} else if ((lambda1 - lambda2) <= 4e-50) {
tmp = R * (phi1 + phi2);
} else {
tmp = t_0;
}
return tmp;
}
def code(R, lambda1, lambda2, phi1, phi2): t_0 = R * (lambda1 - lambda2) tmp = 0 if (lambda1 - lambda2) <= -7.2e+192: tmp = R * t_0 elif (lambda1 - lambda2) <= 4e-50: tmp = R * (phi1 + phi2) else: tmp = t_0 return tmp
function code(R, lambda1, lambda2, phi1, phi2) t_0 = Float64(R * Float64(lambda1 - lambda2)) tmp = 0.0 if (Float64(lambda1 - lambda2) <= -7.2e+192) tmp = Float64(R * t_0); elseif (Float64(lambda1 - lambda2) <= 4e-50) tmp = Float64(R * Float64(phi1 + phi2)); else tmp = t_0; end return tmp end
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2) t_0 = R * (lambda1 - lambda2); tmp = 0.0; if ((lambda1 - lambda2) <= -7.2e+192) tmp = R * t_0; elseif ((lambda1 - lambda2) <= 4e-50) tmp = R * (phi1 + phi2); else tmp = t_0; end tmp_2 = tmp; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := Block[{t$95$0 = N[(R * N[(lambda1 - lambda2), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[N[(lambda1 - lambda2), $MachinePrecision], -7.2e+192], N[(R * t$95$0), $MachinePrecision], If[LessEqual[N[(lambda1 - lambda2), $MachinePrecision], 4e-50], N[(R * N[(phi1 + phi2), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := R \cdot \left(\lambda_1 - \lambda_2\right)\\
\mathbf{if}\;\lambda_1 - \lambda_2 \leq -7.2 \cdot 10^{+192}:\\
\;\;\;\;R \cdot t\_0\\
\mathbf{elif}\;\lambda_1 - \lambda_2 \leq 4 \cdot 10^{-50}:\\
\;\;\;\;R \cdot \left(\phi_1 + \phi_2\right)\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (-.f64 lambda1 lambda2) < -7.2000000000000004e192Initial program 43.6%
Taylor expanded in lambda1 around 0
Applied rewrites20.9%
Taylor expanded in lambda1 around 0
Applied rewrites43.6%
Taylor expanded in lambda1 around 0
Applied rewrites26.1%
if -7.2000000000000004e192 < (-.f64 lambda1 lambda2) < 4.00000000000000003e-50Initial program 70.1%
Taylor expanded in lambda1 around 0
Applied rewrites10.5%
Taylor expanded in lambda1 around 0
Applied rewrites39.7%
if 4.00000000000000003e-50 < (-.f64 lambda1 lambda2) Initial program 57.6%
Taylor expanded in lambda1 around 0
Applied rewrites43.4%
Taylor expanded in lambda1 around 0
Applied rewrites32.7%
Taylor expanded in lambda1 around 0
Applied rewrites50.9%
(FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (if (<= (- lambda1 lambda2) 4e-50) (* R (+ phi1 phi2)) (* R (- lambda1 lambda2))))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if ((lambda1 - lambda2) <= 4e-50) {
tmp = R * (phi1 + phi2);
} else {
tmp = R * (lambda1 - lambda2);
}
return tmp;
}
real(8) function code(r, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
real(8) :: tmp
if ((lambda1 - lambda2) <= 4d-50) then
tmp = r * (phi1 + phi2)
else
tmp = r * (lambda1 - lambda2)
end if
code = tmp
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double tmp;
if ((lambda1 - lambda2) <= 4e-50) {
tmp = R * (phi1 + phi2);
} else {
tmp = R * (lambda1 - lambda2);
}
return tmp;
}
def code(R, lambda1, lambda2, phi1, phi2): tmp = 0 if (lambda1 - lambda2) <= 4e-50: tmp = R * (phi1 + phi2) else: tmp = R * (lambda1 - lambda2) return tmp
function code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0 if (Float64(lambda1 - lambda2) <= 4e-50) tmp = Float64(R * Float64(phi1 + phi2)); else tmp = Float64(R * Float64(lambda1 - lambda2)); end return tmp end
function tmp_2 = code(R, lambda1, lambda2, phi1, phi2) tmp = 0.0; if ((lambda1 - lambda2) <= 4e-50) tmp = R * (phi1 + phi2); else tmp = R * (lambda1 - lambda2); end tmp_2 = tmp; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := If[LessEqual[N[(lambda1 - lambda2), $MachinePrecision], 4e-50], N[(R * N[(phi1 + phi2), $MachinePrecision]), $MachinePrecision], N[(R * N[(lambda1 - lambda2), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\lambda_1 - \lambda_2 \leq 4 \cdot 10^{-50}:\\
\;\;\;\;R \cdot \left(\phi_1 + \phi_2\right)\\
\mathbf{else}:\\
\;\;\;\;R \cdot \left(\lambda_1 - \lambda_2\right)\\
\end{array}
\end{array}
if (-.f64 lambda1 lambda2) < 4.00000000000000003e-50Initial program 62.1%
Taylor expanded in lambda1 around 0
Applied rewrites13.6%
Taylor expanded in lambda1 around 0
Applied rewrites30.7%
if 4.00000000000000003e-50 < (-.f64 lambda1 lambda2) Initial program 57.6%
Taylor expanded in lambda1 around 0
Applied rewrites43.4%
Taylor expanded in lambda1 around 0
Applied rewrites32.7%
Taylor expanded in lambda1 around 0
Applied rewrites50.9%
(FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (* R (+ phi1 phi2)))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * (phi1 + phi2);
}
real(8) function code(r, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
code = r * (phi1 + phi2)
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return R * (phi1 + phi2);
}
def code(R, lambda1, lambda2, phi1, phi2): return R * (phi1 + phi2)
function code(R, lambda1, lambda2, phi1, phi2) return Float64(R * Float64(phi1 + phi2)) end
function tmp = code(R, lambda1, lambda2, phi1, phi2) tmp = R * (phi1 + phi2); end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(R * N[(phi1 + phi2), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
R \cdot \left(\phi_1 + \phi_2\right)
\end{array}
Initial program 60.1%
Taylor expanded in lambda1 around 0
Applied rewrites27.1%
Taylor expanded in lambda1 around 0
Applied rewrites28.0%
(FPCore (R lambda1 lambda2 phi1 phi2) :precision binary64 (- lambda1 lambda2))
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 - lambda2;
}
real(8) function code(r, lambda1, lambda2, phi1, phi2)
real(8), intent (in) :: r
real(8), intent (in) :: lambda1
real(8), intent (in) :: lambda2
real(8), intent (in) :: phi1
real(8), intent (in) :: phi2
code = lambda1 - lambda2
end function
public static double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return lambda1 - lambda2;
}
def code(R, lambda1, lambda2, phi1, phi2): return lambda1 - lambda2
function code(R, lambda1, lambda2, phi1, phi2) return Float64(lambda1 - lambda2) end
function tmp = code(R, lambda1, lambda2, phi1, phi2) tmp = lambda1 - lambda2; end
code[R_, lambda1_, lambda2_, phi1_, phi2_] := N[(lambda1 - lambda2), $MachinePrecision]
\begin{array}{l}
\\
\lambda_1 - \lambda_2
\end{array}
Initial program 60.1%
Taylor expanded in lambda1 around 0
Applied rewrites27.1%
Taylor expanded in lambda1 around 0
Applied rewrites3.3%
herbie shell --seed 2024321
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
:precision binary64
:pre (TRUE)
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))))))