
(FPCore (phi lam es) :precision binary64 :pre (and (>= es 0.0) (< es 1.0)) (/ (* (cos phi) lam) (sqrt (- 1.0 (* es (* (sin phi) (sin phi)))))))
double code(double phi, double lam, double es) {
return (cos(phi) * lam) / sqrt((1.0 - (es * (sin(phi) * sin(phi)))));
}
real(8) function code(phi, lam, es)
use fmin_fmax_functions
real(8), intent (in) :: phi
real(8), intent (in) :: lam
real(8), intent (in) :: es
code = (cos(phi) * lam) / sqrt((1.0d0 - (es * (sin(phi) * sin(phi)))))
end function
public static double code(double phi, double lam, double es) {
return (Math.cos(phi) * lam) / Math.sqrt((1.0 - (es * (Math.sin(phi) * Math.sin(phi)))));
}
def code(phi, lam, es): return (math.cos(phi) * lam) / math.sqrt((1.0 - (es * (math.sin(phi) * math.sin(phi)))))
function code(phi, lam, es) return Float64(Float64(cos(phi) * lam) / sqrt(Float64(1.0 - Float64(es * Float64(sin(phi) * sin(phi)))))) end
function tmp = code(phi, lam, es) tmp = (cos(phi) * lam) / sqrt((1.0 - (es * (sin(phi) * sin(phi))))); end
code[phi_, lam_, es_] := N[(N[(N[Cos[phi], $MachinePrecision] * lam), $MachinePrecision] / N[Sqrt[N[(1.0 - N[(es * N[(N[Sin[phi], $MachinePrecision] * N[Sin[phi], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
f(phi, lam, es): phi in [-inf, +inf], lam in [-inf, +inf], es in [0, 1] code: THEORY BEGIN f(phi, lam, es: real): real = ((cos(phi)) * lam) / (sqrt(((1) - (es * ((sin(phi)) * (sin(phi))))))) END code
\frac{\cos \phi \cdot lam}{\sqrt{1 - es \cdot \left(\sin \phi \cdot \sin \phi\right)}}
Herbie found 13 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (phi lam es) :precision binary64 :pre (and (>= es 0.0) (< es 1.0)) (/ (* (cos phi) lam) (sqrt (- 1.0 (* es (* (sin phi) (sin phi)))))))
double code(double phi, double lam, double es) {
return (cos(phi) * lam) / sqrt((1.0 - (es * (sin(phi) * sin(phi)))));
}
real(8) function code(phi, lam, es)
use fmin_fmax_functions
real(8), intent (in) :: phi
real(8), intent (in) :: lam
real(8), intent (in) :: es
code = (cos(phi) * lam) / sqrt((1.0d0 - (es * (sin(phi) * sin(phi)))))
end function
public static double code(double phi, double lam, double es) {
return (Math.cos(phi) * lam) / Math.sqrt((1.0 - (es * (Math.sin(phi) * Math.sin(phi)))));
}
def code(phi, lam, es): return (math.cos(phi) * lam) / math.sqrt((1.0 - (es * (math.sin(phi) * math.sin(phi)))))
function code(phi, lam, es) return Float64(Float64(cos(phi) * lam) / sqrt(Float64(1.0 - Float64(es * Float64(sin(phi) * sin(phi)))))) end
function tmp = code(phi, lam, es) tmp = (cos(phi) * lam) / sqrt((1.0 - (es * (sin(phi) * sin(phi))))); end
code[phi_, lam_, es_] := N[(N[(N[Cos[phi], $MachinePrecision] * lam), $MachinePrecision] / N[Sqrt[N[(1.0 - N[(es * N[(N[Sin[phi], $MachinePrecision] * N[Sin[phi], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
f(phi, lam, es): phi in [-inf, +inf], lam in [-inf, +inf], es in [0, 1] code: THEORY BEGIN f(phi, lam, es: real): real = ((cos(phi)) * lam) / (sqrt(((1) - (es * ((sin(phi)) * (sin(phi))))))) END code
\frac{\cos \phi \cdot lam}{\sqrt{1 - es \cdot \left(\sin \phi \cdot \sin \phi\right)}}
(FPCore (phi lam es) :precision binary64 :pre (and (>= es 0.0) (< es 1.0)) (/ (* (cos phi) lam) (sqrt (- 1.0 (* es (pow (sin phi) 2.0))))))
double code(double phi, double lam, double es) {
return (cos(phi) * lam) / sqrt((1.0 - (es * pow(sin(phi), 2.0))));
}
real(8) function code(phi, lam, es)
use fmin_fmax_functions
real(8), intent (in) :: phi
real(8), intent (in) :: lam
real(8), intent (in) :: es
code = (cos(phi) * lam) / sqrt((1.0d0 - (es * (sin(phi) ** 2.0d0))))
end function
public static double code(double phi, double lam, double es) {
return (Math.cos(phi) * lam) / Math.sqrt((1.0 - (es * Math.pow(Math.sin(phi), 2.0))));
}
def code(phi, lam, es): return (math.cos(phi) * lam) / math.sqrt((1.0 - (es * math.pow(math.sin(phi), 2.0))))
function code(phi, lam, es) return Float64(Float64(cos(phi) * lam) / sqrt(Float64(1.0 - Float64(es * (sin(phi) ^ 2.0))))) end
function tmp = code(phi, lam, es) tmp = (cos(phi) * lam) / sqrt((1.0 - (es * (sin(phi) ^ 2.0)))); end
code[phi_, lam_, es_] := N[(N[(N[Cos[phi], $MachinePrecision] * lam), $MachinePrecision] / N[Sqrt[N[(1.0 - N[(es * N[Power[N[Sin[phi], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
f(phi, lam, es): phi in [-inf, +inf], lam in [-inf, +inf], es in [0, 1] code: THEORY BEGIN f(phi, lam, es: real): real = ((cos(phi)) * lam) / (sqrt(((1) - (es * ((sin(phi)) ^ (2)))))) END code
\frac{\cos \phi \cdot lam}{\sqrt{1 - es \cdot {\sin \phi}^{2}}}
Initial program 99.8%
Taylor expanded in phi around inf
Applied rewrites99.8%
(FPCore (phi lam es) :precision binary64 :pre (and (>= es 0.0) (< es 1.0)) (* (cos phi) lam))
double code(double phi, double lam, double es) {
return cos(phi) * lam;
}
real(8) function code(phi, lam, es)
use fmin_fmax_functions
real(8), intent (in) :: phi
real(8), intent (in) :: lam
real(8), intent (in) :: es
code = cos(phi) * lam
end function
public static double code(double phi, double lam, double es) {
return Math.cos(phi) * lam;
}
def code(phi, lam, es): return math.cos(phi) * lam
function code(phi, lam, es) return Float64(cos(phi) * lam) end
function tmp = code(phi, lam, es) tmp = cos(phi) * lam; end
code[phi_, lam_, es_] := N[(N[Cos[phi], $MachinePrecision] * lam), $MachinePrecision]
f(phi, lam, es): phi in [-inf, +inf], lam in [-inf, +inf], es in [0, 1] code: THEORY BEGIN f(phi, lam, es: real): real = (cos(phi)) * lam END code
\cos \phi \cdot lam
Initial program 99.8%
Applied rewrites97.6%
Applied rewrites50.3%
Applied rewrites98.9%
(FPCore (phi lam es)
:precision binary64
:pre (and (>= es 0.0) (< es 1.0))
(*
(copysign 1.0 lam)
(if (<=
(/
(* (cos phi) (fabs lam))
(sqrt (- 1.0 (* es (* (sin phi) (sin phi))))))
-2e-308)
(/ (* -0.25 (fabs lam)) (pow 0.5 (expm1 1.0)))
(fabs lam))))double code(double phi, double lam, double es) {
double tmp;
if (((cos(phi) * fabs(lam)) / sqrt((1.0 - (es * (sin(phi) * sin(phi)))))) <= -2e-308) {
tmp = (-0.25 * fabs(lam)) / pow(0.5, expm1(1.0));
} else {
tmp = fabs(lam);
}
return copysign(1.0, lam) * tmp;
}
public static double code(double phi, double lam, double es) {
double tmp;
if (((Math.cos(phi) * Math.abs(lam)) / Math.sqrt((1.0 - (es * (Math.sin(phi) * Math.sin(phi)))))) <= -2e-308) {
tmp = (-0.25 * Math.abs(lam)) / Math.pow(0.5, Math.expm1(1.0));
} else {
tmp = Math.abs(lam);
}
return Math.copySign(1.0, lam) * tmp;
}
def code(phi, lam, es): tmp = 0 if ((math.cos(phi) * math.fabs(lam)) / math.sqrt((1.0 - (es * (math.sin(phi) * math.sin(phi)))))) <= -2e-308: tmp = (-0.25 * math.fabs(lam)) / math.pow(0.5, math.expm1(1.0)) else: tmp = math.fabs(lam) return math.copysign(1.0, lam) * tmp
function code(phi, lam, es) tmp = 0.0 if (Float64(Float64(cos(phi) * abs(lam)) / sqrt(Float64(1.0 - Float64(es * Float64(sin(phi) * sin(phi)))))) <= -2e-308) tmp = Float64(Float64(-0.25 * abs(lam)) / (0.5 ^ expm1(1.0))); else tmp = abs(lam); end return Float64(copysign(1.0, lam) * tmp) end
code[phi_, lam_, es_] := N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[lam]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[N[(N[(N[Cos[phi], $MachinePrecision] * N[Abs[lam], $MachinePrecision]), $MachinePrecision] / N[Sqrt[N[(1.0 - N[(es * N[(N[Sin[phi], $MachinePrecision] * N[Sin[phi], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], -2e-308], N[(N[(-0.25 * N[Abs[lam], $MachinePrecision]), $MachinePrecision] / N[Power[0.5, N[(Exp[1.0] - 1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[Abs[lam], $MachinePrecision]]), $MachinePrecision]
\mathsf{copysign}\left(1, lam\right) \cdot \begin{array}{l}
\mathbf{if}\;\frac{\cos \phi \cdot \left|lam\right|}{\sqrt{1 - es \cdot \left(\sin \phi \cdot \sin \phi\right)}} \leq -2 \cdot 10^{-308}:\\
\;\;\;\;\frac{-0.25 \cdot \left|lam\right|}{{0.5}^{\left(\mathsf{expm1}\left(1\right)\right)}}\\
\mathbf{else}:\\
\;\;\;\;\left|lam\right|\\
\end{array}
if (/.f64 (*.f64 (cos.f64 phi) lam) (sqrt.f64 (-.f64 #s(literal 1 binary64) (*.f64 es (*.f64 (sin.f64 phi) (sin.f64 phi)))))) < -1.9999999999999998e-308Initial program 99.8%
Applied rewrites20.3%
Applied rewrites6.5%
Applied rewrites6.4%
Applied rewrites6.9%
if -1.9999999999999998e-308 < (/.f64 (*.f64 (cos.f64 phi) lam) (sqrt.f64 (-.f64 #s(literal 1 binary64) (*.f64 es (*.f64 (sin.f64 phi) (sin.f64 phi)))))) Initial program 99.8%
Applied rewrites55.5%
(FPCore (phi lam es)
:precision binary64
:pre (and (>= es 0.0) (< es 1.0))
(*
(copysign 1.0 lam)
(if (<=
(/
(* (cos phi) (fabs lam))
(sqrt (- 1.0 (* es (* (sin phi) (sin phi))))))
-2e-308)
(/ (* (sqrt 0.5) (- (fabs lam))) (sqrt (sqrt 0.5)))
(fabs lam))))double code(double phi, double lam, double es) {
double tmp;
if (((cos(phi) * fabs(lam)) / sqrt((1.0 - (es * (sin(phi) * sin(phi)))))) <= -2e-308) {
tmp = (sqrt(0.5) * -fabs(lam)) / sqrt(sqrt(0.5));
} else {
tmp = fabs(lam);
}
return copysign(1.0, lam) * tmp;
}
public static double code(double phi, double lam, double es) {
double tmp;
if (((Math.cos(phi) * Math.abs(lam)) / Math.sqrt((1.0 - (es * (Math.sin(phi) * Math.sin(phi)))))) <= -2e-308) {
tmp = (Math.sqrt(0.5) * -Math.abs(lam)) / Math.sqrt(Math.sqrt(0.5));
} else {
tmp = Math.abs(lam);
}
return Math.copySign(1.0, lam) * tmp;
}
def code(phi, lam, es): tmp = 0 if ((math.cos(phi) * math.fabs(lam)) / math.sqrt((1.0 - (es * (math.sin(phi) * math.sin(phi)))))) <= -2e-308: tmp = (math.sqrt(0.5) * -math.fabs(lam)) / math.sqrt(math.sqrt(0.5)) else: tmp = math.fabs(lam) return math.copysign(1.0, lam) * tmp
function code(phi, lam, es) tmp = 0.0 if (Float64(Float64(cos(phi) * abs(lam)) / sqrt(Float64(1.0 - Float64(es * Float64(sin(phi) * sin(phi)))))) <= -2e-308) tmp = Float64(Float64(sqrt(0.5) * Float64(-abs(lam))) / sqrt(sqrt(0.5))); else tmp = abs(lam); end return Float64(copysign(1.0, lam) * tmp) end
function tmp_2 = code(phi, lam, es) tmp = 0.0; if (((cos(phi) * abs(lam)) / sqrt((1.0 - (es * (sin(phi) * sin(phi)))))) <= -2e-308) tmp = (sqrt(0.5) * -abs(lam)) / sqrt(sqrt(0.5)); else tmp = abs(lam); end tmp_2 = (sign(lam) * abs(1.0)) * tmp; end
code[phi_, lam_, es_] := N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[lam]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[N[(N[(N[Cos[phi], $MachinePrecision] * N[Abs[lam], $MachinePrecision]), $MachinePrecision] / N[Sqrt[N[(1.0 - N[(es * N[(N[Sin[phi], $MachinePrecision] * N[Sin[phi], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], -2e-308], N[(N[(N[Sqrt[0.5], $MachinePrecision] * (-N[Abs[lam], $MachinePrecision])), $MachinePrecision] / N[Sqrt[N[Sqrt[0.5], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[Abs[lam], $MachinePrecision]]), $MachinePrecision]
\mathsf{copysign}\left(1, lam\right) \cdot \begin{array}{l}
\mathbf{if}\;\frac{\cos \phi \cdot \left|lam\right|}{\sqrt{1 - es \cdot \left(\sin \phi \cdot \sin \phi\right)}} \leq -2 \cdot 10^{-308}:\\
\;\;\;\;\frac{\sqrt{0.5} \cdot \left(-\left|lam\right|\right)}{\sqrt{\sqrt{0.5}}}\\
\mathbf{else}:\\
\;\;\;\;\left|lam\right|\\
\end{array}
if (/.f64 (*.f64 (cos.f64 phi) lam) (sqrt.f64 (-.f64 #s(literal 1 binary64) (*.f64 es (*.f64 (sin.f64 phi) (sin.f64 phi)))))) < -1.9999999999999998e-308Initial program 99.8%
Applied rewrites20.3%
Applied rewrites15.9%
Applied rewrites16.8%
Applied rewrites6.9%
if -1.9999999999999998e-308 < (/.f64 (*.f64 (cos.f64 phi) lam) (sqrt.f64 (-.f64 #s(literal 1 binary64) (*.f64 es (*.f64 (sin.f64 phi) (sin.f64 phi)))))) Initial program 99.8%
Applied rewrites55.5%
(FPCore (phi lam es)
:precision binary64
:pre (and (>= es 0.0) (< es 1.0))
(*
(copysign 1.0 lam)
(if (<=
(/
(* (cos phi) (fabs lam))
(sqrt (- 1.0 (* es (* (sin phi) (sin phi))))))
-2e-308)
(* -0.7071067811865475 (fabs lam))
(fabs lam))))double code(double phi, double lam, double es) {
double tmp;
if (((cos(phi) * fabs(lam)) / sqrt((1.0 - (es * (sin(phi) * sin(phi)))))) <= -2e-308) {
tmp = -0.7071067811865475 * fabs(lam);
} else {
tmp = fabs(lam);
}
return copysign(1.0, lam) * tmp;
}
public static double code(double phi, double lam, double es) {
double tmp;
if (((Math.cos(phi) * Math.abs(lam)) / Math.sqrt((1.0 - (es * (Math.sin(phi) * Math.sin(phi)))))) <= -2e-308) {
tmp = -0.7071067811865475 * Math.abs(lam);
} else {
tmp = Math.abs(lam);
}
return Math.copySign(1.0, lam) * tmp;
}
def code(phi, lam, es): tmp = 0 if ((math.cos(phi) * math.fabs(lam)) / math.sqrt((1.0 - (es * (math.sin(phi) * math.sin(phi)))))) <= -2e-308: tmp = -0.7071067811865475 * math.fabs(lam) else: tmp = math.fabs(lam) return math.copysign(1.0, lam) * tmp
function code(phi, lam, es) tmp = 0.0 if (Float64(Float64(cos(phi) * abs(lam)) / sqrt(Float64(1.0 - Float64(es * Float64(sin(phi) * sin(phi)))))) <= -2e-308) tmp = Float64(-0.7071067811865475 * abs(lam)); else tmp = abs(lam); end return Float64(copysign(1.0, lam) * tmp) end
function tmp_2 = code(phi, lam, es) tmp = 0.0; if (((cos(phi) * abs(lam)) / sqrt((1.0 - (es * (sin(phi) * sin(phi)))))) <= -2e-308) tmp = -0.7071067811865475 * abs(lam); else tmp = abs(lam); end tmp_2 = (sign(lam) * abs(1.0)) * tmp; end
code[phi_, lam_, es_] := N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[lam]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[N[(N[(N[Cos[phi], $MachinePrecision] * N[Abs[lam], $MachinePrecision]), $MachinePrecision] / N[Sqrt[N[(1.0 - N[(es * N[(N[Sin[phi], $MachinePrecision] * N[Sin[phi], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], -2e-308], N[(-0.7071067811865475 * N[Abs[lam], $MachinePrecision]), $MachinePrecision], N[Abs[lam], $MachinePrecision]]), $MachinePrecision]
\mathsf{copysign}\left(1, lam\right) \cdot \begin{array}{l}
\mathbf{if}\;\frac{\cos \phi \cdot \left|lam\right|}{\sqrt{1 - es \cdot \left(\sin \phi \cdot \sin \phi\right)}} \leq -2 \cdot 10^{-308}:\\
\;\;\;\;-0.7071067811865475 \cdot \left|lam\right|\\
\mathbf{else}:\\
\;\;\;\;\left|lam\right|\\
\end{array}
if (/.f64 (*.f64 (cos.f64 phi) lam) (sqrt.f64 (-.f64 #s(literal 1 binary64) (*.f64 es (*.f64 (sin.f64 phi) (sin.f64 phi)))))) < -1.9999999999999998e-308Initial program 99.8%
Applied rewrites20.3%
Applied rewrites6.9%
Evaluated real constant6.9%
Taylor expanded in lam around 0
Applied rewrites6.9%
if -1.9999999999999998e-308 < (/.f64 (*.f64 (cos.f64 phi) lam) (sqrt.f64 (-.f64 #s(literal 1 binary64) (*.f64 es (*.f64 (sin.f64 phi) (sin.f64 phi)))))) Initial program 99.8%
Applied rewrites55.5%
(FPCore (phi lam es)
:precision binary64
:pre (and (>= es 0.0) (< es 1.0))
(*
(copysign 1.0 lam)
(if (<=
(/
(* (cos phi) (fabs lam))
(sqrt (- 1.0 (* es (* (sin phi) (sin phi))))))
-2e-308)
(/ (* (sqrt 0.5) (fabs lam)) -1.0)
(fabs lam))))double code(double phi, double lam, double es) {
double tmp;
if (((cos(phi) * fabs(lam)) / sqrt((1.0 - (es * (sin(phi) * sin(phi)))))) <= -2e-308) {
tmp = (sqrt(0.5) * fabs(lam)) / -1.0;
} else {
tmp = fabs(lam);
}
return copysign(1.0, lam) * tmp;
}
public static double code(double phi, double lam, double es) {
double tmp;
if (((Math.cos(phi) * Math.abs(lam)) / Math.sqrt((1.0 - (es * (Math.sin(phi) * Math.sin(phi)))))) <= -2e-308) {
tmp = (Math.sqrt(0.5) * Math.abs(lam)) / -1.0;
} else {
tmp = Math.abs(lam);
}
return Math.copySign(1.0, lam) * tmp;
}
def code(phi, lam, es): tmp = 0 if ((math.cos(phi) * math.fabs(lam)) / math.sqrt((1.0 - (es * (math.sin(phi) * math.sin(phi)))))) <= -2e-308: tmp = (math.sqrt(0.5) * math.fabs(lam)) / -1.0 else: tmp = math.fabs(lam) return math.copysign(1.0, lam) * tmp
function code(phi, lam, es) tmp = 0.0 if (Float64(Float64(cos(phi) * abs(lam)) / sqrt(Float64(1.0 - Float64(es * Float64(sin(phi) * sin(phi)))))) <= -2e-308) tmp = Float64(Float64(sqrt(0.5) * abs(lam)) / -1.0); else tmp = abs(lam); end return Float64(copysign(1.0, lam) * tmp) end
function tmp_2 = code(phi, lam, es) tmp = 0.0; if (((cos(phi) * abs(lam)) / sqrt((1.0 - (es * (sin(phi) * sin(phi)))))) <= -2e-308) tmp = (sqrt(0.5) * abs(lam)) / -1.0; else tmp = abs(lam); end tmp_2 = (sign(lam) * abs(1.0)) * tmp; end
code[phi_, lam_, es_] := N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[lam]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[N[(N[(N[Cos[phi], $MachinePrecision] * N[Abs[lam], $MachinePrecision]), $MachinePrecision] / N[Sqrt[N[(1.0 - N[(es * N[(N[Sin[phi], $MachinePrecision] * N[Sin[phi], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], -2e-308], N[(N[(N[Sqrt[0.5], $MachinePrecision] * N[Abs[lam], $MachinePrecision]), $MachinePrecision] / -1.0), $MachinePrecision], N[Abs[lam], $MachinePrecision]]), $MachinePrecision]
\mathsf{copysign}\left(1, lam\right) \cdot \begin{array}{l}
\mathbf{if}\;\frac{\cos \phi \cdot \left|lam\right|}{\sqrt{1 - es \cdot \left(\sin \phi \cdot \sin \phi\right)}} \leq -2 \cdot 10^{-308}:\\
\;\;\;\;\frac{\sqrt{0.5} \cdot \left|lam\right|}{-1}\\
\mathbf{else}:\\
\;\;\;\;\left|lam\right|\\
\end{array}
if (/.f64 (*.f64 (cos.f64 phi) lam) (sqrt.f64 (-.f64 #s(literal 1 binary64) (*.f64 es (*.f64 (sin.f64 phi) (sin.f64 phi)))))) < -1.9999999999999998e-308Initial program 99.8%
Applied rewrites20.3%
Applied rewrites15.9%
Applied rewrites16.8%
Applied rewrites6.9%
if -1.9999999999999998e-308 < (/.f64 (*.f64 (cos.f64 phi) lam) (sqrt.f64 (-.f64 #s(literal 1 binary64) (*.f64 es (*.f64 (sin.f64 phi) (sin.f64 phi)))))) Initial program 99.8%
Applied rewrites55.5%
(FPCore (phi lam es)
:precision binary64
:pre (and (>= es 0.0) (< es 1.0))
(*
(copysign 1.0 lam)
(if (<=
(/
(* (cos phi) (fabs lam))
(sqrt (- 1.0 (* es (* (sin phi) (sin phi))))))
-2e-308)
(- (fabs lam))
(fabs lam))))double code(double phi, double lam, double es) {
double tmp;
if (((cos(phi) * fabs(lam)) / sqrt((1.0 - (es * (sin(phi) * sin(phi)))))) <= -2e-308) {
tmp = -fabs(lam);
} else {
tmp = fabs(lam);
}
return copysign(1.0, lam) * tmp;
}
public static double code(double phi, double lam, double es) {
double tmp;
if (((Math.cos(phi) * Math.abs(lam)) / Math.sqrt((1.0 - (es * (Math.sin(phi) * Math.sin(phi)))))) <= -2e-308) {
tmp = -Math.abs(lam);
} else {
tmp = Math.abs(lam);
}
return Math.copySign(1.0, lam) * tmp;
}
def code(phi, lam, es): tmp = 0 if ((math.cos(phi) * math.fabs(lam)) / math.sqrt((1.0 - (es * (math.sin(phi) * math.sin(phi)))))) <= -2e-308: tmp = -math.fabs(lam) else: tmp = math.fabs(lam) return math.copysign(1.0, lam) * tmp
function code(phi, lam, es) tmp = 0.0 if (Float64(Float64(cos(phi) * abs(lam)) / sqrt(Float64(1.0 - Float64(es * Float64(sin(phi) * sin(phi)))))) <= -2e-308) tmp = Float64(-abs(lam)); else tmp = abs(lam); end return Float64(copysign(1.0, lam) * tmp) end
function tmp_2 = code(phi, lam, es) tmp = 0.0; if (((cos(phi) * abs(lam)) / sqrt((1.0 - (es * (sin(phi) * sin(phi)))))) <= -2e-308) tmp = -abs(lam); else tmp = abs(lam); end tmp_2 = (sign(lam) * abs(1.0)) * tmp; end
code[phi_, lam_, es_] := N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[lam]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[N[(N[(N[Cos[phi], $MachinePrecision] * N[Abs[lam], $MachinePrecision]), $MachinePrecision] / N[Sqrt[N[(1.0 - N[(es * N[(N[Sin[phi], $MachinePrecision] * N[Sin[phi], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], -2e-308], (-N[Abs[lam], $MachinePrecision]), N[Abs[lam], $MachinePrecision]]), $MachinePrecision]
\mathsf{copysign}\left(1, lam\right) \cdot \begin{array}{l}
\mathbf{if}\;\frac{\cos \phi \cdot \left|lam\right|}{\sqrt{1 - es \cdot \left(\sin \phi \cdot \sin \phi\right)}} \leq -2 \cdot 10^{-308}:\\
\;\;\;\;-\left|lam\right|\\
\mathbf{else}:\\
\;\;\;\;\left|lam\right|\\
\end{array}
if (/.f64 (*.f64 (cos.f64 phi) lam) (sqrt.f64 (-.f64 #s(literal 1 binary64) (*.f64 es (*.f64 (sin.f64 phi) (sin.f64 phi)))))) < -1.9999999999999998e-308Initial program 99.8%
Applied rewrites3.5%
Applied rewrites7.0%
if -1.9999999999999998e-308 < (/.f64 (*.f64 (cos.f64 phi) lam) (sqrt.f64 (-.f64 #s(literal 1 binary64) (*.f64 es (*.f64 (sin.f64 phi) (sin.f64 phi)))))) Initial program 99.8%
Applied rewrites55.5%
(FPCore (phi lam es) :precision binary64 :pre (and (>= es 0.0) (< es 1.0)) lam)
double code(double phi, double lam, double es) {
return lam;
}
real(8) function code(phi, lam, es)
use fmin_fmax_functions
real(8), intent (in) :: phi
real(8), intent (in) :: lam
real(8), intent (in) :: es
code = lam
end function
public static double code(double phi, double lam, double es) {
return lam;
}
def code(phi, lam, es): return lam
function code(phi, lam, es) return lam end
function tmp = code(phi, lam, es) tmp = lam; end
code[phi_, lam_, es_] := lam
f(phi, lam, es): phi in [-inf, +inf], lam in [-inf, +inf], es in [0, 1] code: THEORY BEGIN f(phi, lam, es: real): real = lam END code
lam
Initial program 99.8%
Applied rewrites55.5%
(FPCore (phi lam es) :precision binary64 :pre (and (>= es 0.0) (< es 1.0)) (* (copysign 1.0 lam) 0.25))
double code(double phi, double lam, double es) {
return copysign(1.0, lam) * 0.25;
}
public static double code(double phi, double lam, double es) {
return Math.copySign(1.0, lam) * 0.25;
}
def code(phi, lam, es): return math.copysign(1.0, lam) * 0.25
function code(phi, lam, es) return Float64(copysign(1.0, lam) * 0.25) end
function tmp = code(phi, lam, es) tmp = (sign(lam) * abs(1.0)) * 0.25; end
code[phi_, lam_, es_] := N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[lam]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * 0.25), $MachinePrecision]
\mathsf{copysign}\left(1, lam\right) \cdot 0.25
Initial program 99.8%
Applied rewrites3.5%
(FPCore (phi lam es) :precision binary64 :pre (and (>= es 0.0) (< es 1.0)) 0.0)
double code(double phi, double lam, double es) {
return 0.0;
}
real(8) function code(phi, lam, es)
use fmin_fmax_functions
real(8), intent (in) :: phi
real(8), intent (in) :: lam
real(8), intent (in) :: es
code = 0.0d0
end function
public static double code(double phi, double lam, double es) {
return 0.0;
}
def code(phi, lam, es): return 0.0
function code(phi, lam, es) return 0.0 end
function tmp = code(phi, lam, es) tmp = 0.0; end
code[phi_, lam_, es_] := 0.0
f(phi, lam, es): phi in [-inf, +inf], lam in [-inf, +inf], es in [0, 1] code: THEORY BEGIN f(phi, lam, es: real): real = 0 END code
0
Initial program 99.8%
Applied rewrites3.9%
(FPCore (phi lam es) :precision binary64 :pre (and (>= es 0.0) (< es 1.0)) -0.5)
double code(double phi, double lam, double es) {
return -0.5;
}
real(8) function code(phi, lam, es)
use fmin_fmax_functions
real(8), intent (in) :: phi
real(8), intent (in) :: lam
real(8), intent (in) :: es
code = -0.5d0
end function
public static double code(double phi, double lam, double es) {
return -0.5;
}
def code(phi, lam, es): return -0.5
function code(phi, lam, es) return -0.5 end
function tmp = code(phi, lam, es) tmp = -0.5; end
code[phi_, lam_, es_] := -0.5
f(phi, lam, es): phi in [-inf, +inf], lam in [-inf, +inf], es in [0, 1] code: THEORY BEGIN f(phi, lam, es: real): real = -5e-1 END code
-0.5
Initial program 99.8%
Applied rewrites3.5%
(FPCore (phi lam es) :precision binary64 :pre (and (>= es 0.0) (< es 1.0)) -2.0)
double code(double phi, double lam, double es) {
return -2.0;
}
real(8) function code(phi, lam, es)
use fmin_fmax_functions
real(8), intent (in) :: phi
real(8), intent (in) :: lam
real(8), intent (in) :: es
code = -2.0d0
end function
public static double code(double phi, double lam, double es) {
return -2.0;
}
def code(phi, lam, es): return -2.0
function code(phi, lam, es) return -2.0 end
function tmp = code(phi, lam, es) tmp = -2.0; end
code[phi_, lam_, es_] := -2.0
f(phi, lam, es): phi in [-inf, +inf], lam in [-inf, +inf], es in [0, 1] code: THEORY BEGIN f(phi, lam, es: real): real = -2 END code
-2
Initial program 99.8%
Applied rewrites3.5%
(FPCore (phi lam es) :precision binary64 :pre (and (>= es 0.0) (< es 1.0)) -3.141592653589793)
double code(double phi, double lam, double es) {
return -3.141592653589793;
}
real(8) function code(phi, lam, es)
use fmin_fmax_functions
real(8), intent (in) :: phi
real(8), intent (in) :: lam
real(8), intent (in) :: es
code = -3.141592653589793d0
end function
public static double code(double phi, double lam, double es) {
return -3.141592653589793;
}
def code(phi, lam, es): return -3.141592653589793
function code(phi, lam, es) return -3.141592653589793 end
function tmp = code(phi, lam, es) tmp = -3.141592653589793; end
code[phi_, lam_, es_] := -3.141592653589793
f(phi, lam, es): phi in [-inf, +inf], lam in [-inf, +inf], es in [0, 1] code: THEORY BEGIN f(phi, lam, es: real): real = -3141592653589793115997963468544185161590576171875e-48 END code
-3.141592653589793
Initial program 99.8%
Applied rewrites3.5%
Evaluated real constant3.5%
herbie shell --seed 2026050 +o generate:egglog
(FPCore (phi lam es)
:name "approx-scaled-lambda"
:precision binary64
:pre (and (>= es 0.0) (< es 1.0))
(/ (* (cos phi) lam) (sqrt (- 1.0 (* es (* (sin phi) (sin phi)))))))