
(FPCore (eh ew t) :precision binary64 (let* ((t_1 (atan (/ (* (- eh) (tan t)) ew)))) (fabs (- (* (* ew (cos t)) (cos t_1)) (* (* eh (sin t)) (sin t_1))))))
double code(double eh, double ew, double t) {
double t_1 = atan(((-eh * tan(t)) / ew));
return fabs((((ew * cos(t)) * cos(t_1)) - ((eh * sin(t)) * sin(t_1))));
}
real(8) function code(eh, ew, t)
real(8), intent (in) :: eh
real(8), intent (in) :: ew
real(8), intent (in) :: t
real(8) :: t_1
t_1 = atan(((-eh * tan(t)) / ew))
code = abs((((ew * cos(t)) * cos(t_1)) - ((eh * sin(t)) * sin(t_1))))
end function
public static double code(double eh, double ew, double t) {
double t_1 = Math.atan(((-eh * Math.tan(t)) / ew));
return Math.abs((((ew * Math.cos(t)) * Math.cos(t_1)) - ((eh * Math.sin(t)) * Math.sin(t_1))));
}
def code(eh, ew, t): t_1 = math.atan(((-eh * math.tan(t)) / ew)) return math.fabs((((ew * math.cos(t)) * math.cos(t_1)) - ((eh * math.sin(t)) * math.sin(t_1))))
function code(eh, ew, t) t_1 = atan(Float64(Float64(Float64(-eh) * tan(t)) / ew)) return abs(Float64(Float64(Float64(ew * cos(t)) * cos(t_1)) - Float64(Float64(eh * sin(t)) * sin(t_1)))) end
function tmp = code(eh, ew, t) t_1 = atan(((-eh * tan(t)) / ew)); tmp = abs((((ew * cos(t)) * cos(t_1)) - ((eh * sin(t)) * sin(t_1)))); end
code[eh_, ew_, t_] := Block[{t$95$1 = N[ArcTan[N[(N[((-eh) * N[Tan[t], $MachinePrecision]), $MachinePrecision] / ew), $MachinePrecision]], $MachinePrecision]}, N[Abs[N[(N[(N[(ew * N[Cos[t], $MachinePrecision]), $MachinePrecision] * N[Cos[t$95$1], $MachinePrecision]), $MachinePrecision] - N[(N[(eh * N[Sin[t], $MachinePrecision]), $MachinePrecision] * N[Sin[t$95$1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \tan^{-1} \left(\frac{\left(-eh\right) \cdot \tan t}{ew}\right)\\
\left|\left(ew \cdot \cos t\right) \cdot \cos t\_1 - \left(eh \cdot \sin t\right) \cdot \sin t\_1\right|
\end{array}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 11 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (eh ew t) :precision binary64 (let* ((t_1 (atan (/ (* (- eh) (tan t)) ew)))) (fabs (- (* (* ew (cos t)) (cos t_1)) (* (* eh (sin t)) (sin t_1))))))
double code(double eh, double ew, double t) {
double t_1 = atan(((-eh * tan(t)) / ew));
return fabs((((ew * cos(t)) * cos(t_1)) - ((eh * sin(t)) * sin(t_1))));
}
real(8) function code(eh, ew, t)
real(8), intent (in) :: eh
real(8), intent (in) :: ew
real(8), intent (in) :: t
real(8) :: t_1
t_1 = atan(((-eh * tan(t)) / ew))
code = abs((((ew * cos(t)) * cos(t_1)) - ((eh * sin(t)) * sin(t_1))))
end function
public static double code(double eh, double ew, double t) {
double t_1 = Math.atan(((-eh * Math.tan(t)) / ew));
return Math.abs((((ew * Math.cos(t)) * Math.cos(t_1)) - ((eh * Math.sin(t)) * Math.sin(t_1))));
}
def code(eh, ew, t): t_1 = math.atan(((-eh * math.tan(t)) / ew)) return math.fabs((((ew * math.cos(t)) * math.cos(t_1)) - ((eh * math.sin(t)) * math.sin(t_1))))
function code(eh, ew, t) t_1 = atan(Float64(Float64(Float64(-eh) * tan(t)) / ew)) return abs(Float64(Float64(Float64(ew * cos(t)) * cos(t_1)) - Float64(Float64(eh * sin(t)) * sin(t_1)))) end
function tmp = code(eh, ew, t) t_1 = atan(((-eh * tan(t)) / ew)); tmp = abs((((ew * cos(t)) * cos(t_1)) - ((eh * sin(t)) * sin(t_1)))); end
code[eh_, ew_, t_] := Block[{t$95$1 = N[ArcTan[N[(N[((-eh) * N[Tan[t], $MachinePrecision]), $MachinePrecision] / ew), $MachinePrecision]], $MachinePrecision]}, N[Abs[N[(N[(N[(ew * N[Cos[t], $MachinePrecision]), $MachinePrecision] * N[Cos[t$95$1], $MachinePrecision]), $MachinePrecision] - N[(N[(eh * N[Sin[t], $MachinePrecision]), $MachinePrecision] * N[Sin[t$95$1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \tan^{-1} \left(\frac{\left(-eh\right) \cdot \tan t}{ew}\right)\\
\left|\left(ew \cdot \cos t\right) \cdot \cos t\_1 - \left(eh \cdot \sin t\right) \cdot \sin t\_1\right|
\end{array}
\end{array}
(FPCore (eh ew t)
:precision binary64
(let* ((t_1 (* (- eh) (/ (tan t) ew))))
(fabs
(fma
(/ (cos t) (sqrt (+ 1.0 (pow t_1 2.0))))
ew
(* (sin (atan t_1)) (- (* eh (sin t))))))))
double code(double eh, double ew, double t) {
double t_1 = -eh * (tan(t) / ew);
return fabs(fma((cos(t) / sqrt((1.0 + pow(t_1, 2.0)))), ew, (sin(atan(t_1)) * -(eh * sin(t)))));
}
function code(eh, ew, t) t_1 = Float64(Float64(-eh) * Float64(tan(t) / ew)) return abs(fma(Float64(cos(t) / sqrt(Float64(1.0 + (t_1 ^ 2.0)))), ew, Float64(sin(atan(t_1)) * Float64(-Float64(eh * sin(t)))))) end
code[eh_, ew_, t_] := Block[{t$95$1 = N[((-eh) * N[(N[Tan[t], $MachinePrecision] / ew), $MachinePrecision]), $MachinePrecision]}, N[Abs[N[(N[(N[Cos[t], $MachinePrecision] / N[Sqrt[N[(1.0 + N[Power[t$95$1, 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * ew + N[(N[Sin[N[ArcTan[t$95$1], $MachinePrecision]], $MachinePrecision] * (-N[(eh * N[Sin[t], $MachinePrecision]), $MachinePrecision])), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \left(-eh\right) \cdot \frac{\tan t}{ew}\\
\left|\mathsf{fma}\left(\frac{\cos t}{\sqrt{1 + {t\_1}^{2}}}, ew, \sin \tan^{-1} t\_1 \cdot \left(-eh \cdot \sin t\right)\right)\right|
\end{array}
\end{array}
Initial program 99.8%
lift--.f64N/A
sub-negN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-fma.f64N/A
Applied rewrites99.8%
Final simplification99.8%
(FPCore (eh ew t)
:precision binary64
(let* ((t_1 (* (cos t) ew)) (t_2 (atan (- (/ (* eh (tan t)) ew)))))
(if (<= (- (* t_1 (cos t_2)) (* (* eh (sin t)) (sin t_2))) -2e-259)
(/ 1.0 (fabs (/ 1.0 ew)))
t_1)))
double code(double eh, double ew, double t) {
double t_1 = cos(t) * ew;
double t_2 = atan(-((eh * tan(t)) / ew));
double tmp;
if (((t_1 * cos(t_2)) - ((eh * sin(t)) * sin(t_2))) <= -2e-259) {
tmp = 1.0 / fabs((1.0 / ew));
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(eh, ew, t)
real(8), intent (in) :: eh
real(8), intent (in) :: ew
real(8), intent (in) :: t
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_1 = cos(t) * ew
t_2 = atan(-((eh * tan(t)) / ew))
if (((t_1 * cos(t_2)) - ((eh * sin(t)) * sin(t_2))) <= (-2d-259)) then
tmp = 1.0d0 / abs((1.0d0 / ew))
else
tmp = t_1
end if
code = tmp
end function
public static double code(double eh, double ew, double t) {
double t_1 = Math.cos(t) * ew;
double t_2 = Math.atan(-((eh * Math.tan(t)) / ew));
double tmp;
if (((t_1 * Math.cos(t_2)) - ((eh * Math.sin(t)) * Math.sin(t_2))) <= -2e-259) {
tmp = 1.0 / Math.abs((1.0 / ew));
} else {
tmp = t_1;
}
return tmp;
}
def code(eh, ew, t): t_1 = math.cos(t) * ew t_2 = math.atan(-((eh * math.tan(t)) / ew)) tmp = 0 if ((t_1 * math.cos(t_2)) - ((eh * math.sin(t)) * math.sin(t_2))) <= -2e-259: tmp = 1.0 / math.fabs((1.0 / ew)) else: tmp = t_1 return tmp
function code(eh, ew, t) t_1 = Float64(cos(t) * ew) t_2 = atan(Float64(-Float64(Float64(eh * tan(t)) / ew))) tmp = 0.0 if (Float64(Float64(t_1 * cos(t_2)) - Float64(Float64(eh * sin(t)) * sin(t_2))) <= -2e-259) tmp = Float64(1.0 / abs(Float64(1.0 / ew))); else tmp = t_1; end return tmp end
function tmp_2 = code(eh, ew, t) t_1 = cos(t) * ew; t_2 = atan(-((eh * tan(t)) / ew)); tmp = 0.0; if (((t_1 * cos(t_2)) - ((eh * sin(t)) * sin(t_2))) <= -2e-259) tmp = 1.0 / abs((1.0 / ew)); else tmp = t_1; end tmp_2 = tmp; end
code[eh_, ew_, t_] := Block[{t$95$1 = N[(N[Cos[t], $MachinePrecision] * ew), $MachinePrecision]}, Block[{t$95$2 = N[ArcTan[(-N[(N[(eh * N[Tan[t], $MachinePrecision]), $MachinePrecision] / ew), $MachinePrecision])], $MachinePrecision]}, If[LessEqual[N[(N[(t$95$1 * N[Cos[t$95$2], $MachinePrecision]), $MachinePrecision] - N[(N[(eh * N[Sin[t], $MachinePrecision]), $MachinePrecision] * N[Sin[t$95$2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], -2e-259], N[(1.0 / N[Abs[N[(1.0 / ew), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], t$95$1]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \cos t \cdot ew\\
t_2 := \tan^{-1} \left(-\frac{eh \cdot \tan t}{ew}\right)\\
\mathbf{if}\;t\_1 \cdot \cos t\_2 - \left(eh \cdot \sin t\right) \cdot \sin t\_2 \leq -2 \cdot 10^{-259}:\\
\;\;\;\;\frac{1}{\left|\frac{1}{ew}\right|}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if (-.f64 (*.f64 (*.f64 ew (cos.f64 t)) (cos.f64 (atan.f64 (/.f64 (*.f64 (neg.f64 eh) (tan.f64 t)) ew)))) (*.f64 (*.f64 eh (sin.f64 t)) (sin.f64 (atan.f64 (/.f64 (*.f64 (neg.f64 eh) (tan.f64 t)) ew))))) < -2.0000000000000001e-259Initial program 99.9%
Applied rewrites73.7%
Taylor expanded in t around 0
lower-/.f6440.3
Applied rewrites40.3%
if -2.0000000000000001e-259 < (-.f64 (*.f64 (*.f64 ew (cos.f64 t)) (cos.f64 (atan.f64 (/.f64 (*.f64 (neg.f64 eh) (tan.f64 t)) ew)))) (*.f64 (*.f64 eh (sin.f64 t)) (sin.f64 (atan.f64 (/.f64 (*.f64 (neg.f64 eh) (tan.f64 t)) ew))))) Initial program 99.7%
lift--.f64N/A
sub-negN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-fma.f64N/A
Applied rewrites99.7%
Applied rewrites71.1%
Taylor expanded in ew around inf
*-commutativeN/A
lower-*.f64N/A
lower-cos.f6457.6
Applied rewrites57.6%
Final simplification49.5%
(FPCore (eh ew t) :precision binary64 (fabs (fma (cos t) ew (* (sin (atan (* (- eh) (/ (tan t) ew)))) (- (* eh (sin t)))))))
double code(double eh, double ew, double t) {
return fabs(fma(cos(t), ew, (sin(atan((-eh * (tan(t) / ew)))) * -(eh * sin(t)))));
}
function code(eh, ew, t) return abs(fma(cos(t), ew, Float64(sin(atan(Float64(Float64(-eh) * Float64(tan(t) / ew)))) * Float64(-Float64(eh * sin(t)))))) end
code[eh_, ew_, t_] := N[Abs[N[(N[Cos[t], $MachinePrecision] * ew + N[(N[Sin[N[ArcTan[N[((-eh) * N[(N[Tan[t], $MachinePrecision] / ew), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision] * (-N[(eh * N[Sin[t], $MachinePrecision]), $MachinePrecision])), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}
\\
\left|\mathsf{fma}\left(\cos t, ew, \sin \tan^{-1} \left(\left(-eh\right) \cdot \frac{\tan t}{ew}\right) \cdot \left(-eh \cdot \sin t\right)\right)\right|
\end{array}
Initial program 99.8%
lift--.f64N/A
sub-negN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-fma.f64N/A
Applied rewrites99.8%
Taylor expanded in eh around 0
lower-cos.f6498.9
Applied rewrites98.9%
Final simplification98.9%
(FPCore (eh ew t)
:precision binary64
(let* ((t_1 (fabs (* eh (sin t)))))
(if (<= eh -5.2e+64)
t_1
(if (<= eh 920000000.0) (fabs (* (cos t) ew)) t_1))))
double code(double eh, double ew, double t) {
double t_1 = fabs((eh * sin(t)));
double tmp;
if (eh <= -5.2e+64) {
tmp = t_1;
} else if (eh <= 920000000.0) {
tmp = fabs((cos(t) * ew));
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(eh, ew, t)
real(8), intent (in) :: eh
real(8), intent (in) :: ew
real(8), intent (in) :: t
real(8) :: t_1
real(8) :: tmp
t_1 = abs((eh * sin(t)))
if (eh <= (-5.2d+64)) then
tmp = t_1
else if (eh <= 920000000.0d0) then
tmp = abs((cos(t) * ew))
else
tmp = t_1
end if
code = tmp
end function
public static double code(double eh, double ew, double t) {
double t_1 = Math.abs((eh * Math.sin(t)));
double tmp;
if (eh <= -5.2e+64) {
tmp = t_1;
} else if (eh <= 920000000.0) {
tmp = Math.abs((Math.cos(t) * ew));
} else {
tmp = t_1;
}
return tmp;
}
def code(eh, ew, t): t_1 = math.fabs((eh * math.sin(t))) tmp = 0 if eh <= -5.2e+64: tmp = t_1 elif eh <= 920000000.0: tmp = math.fabs((math.cos(t) * ew)) else: tmp = t_1 return tmp
function code(eh, ew, t) t_1 = abs(Float64(eh * sin(t))) tmp = 0.0 if (eh <= -5.2e+64) tmp = t_1; elseif (eh <= 920000000.0) tmp = abs(Float64(cos(t) * ew)); else tmp = t_1; end return tmp end
function tmp_2 = code(eh, ew, t) t_1 = abs((eh * sin(t))); tmp = 0.0; if (eh <= -5.2e+64) tmp = t_1; elseif (eh <= 920000000.0) tmp = abs((cos(t) * ew)); else tmp = t_1; end tmp_2 = tmp; end
code[eh_, ew_, t_] := Block[{t$95$1 = N[Abs[N[(eh * N[Sin[t], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[eh, -5.2e+64], t$95$1, If[LessEqual[eh, 920000000.0], N[Abs[N[(N[Cos[t], $MachinePrecision] * ew), $MachinePrecision]], $MachinePrecision], t$95$1]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \left|eh \cdot \sin t\right|\\
\mathbf{if}\;eh \leq -5.2 \cdot 10^{+64}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;eh \leq 920000000:\\
\;\;\;\;\left|\cos t \cdot ew\right|\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if eh < -5.19999999999999994e64 or 9.2e8 < eh Initial program 99.7%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
Applied rewrites53.7%
Taylor expanded in eh around inf
lower-*.f64N/A
lower-sin.f6476.1
Applied rewrites76.1%
if -5.19999999999999994e64 < eh < 9.2e8Initial program 99.8%
lift--.f64N/A
sub-negN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-fma.f64N/A
Applied rewrites99.8%
Taylor expanded in eh around 0
lower-*.f64N/A
lower-cos.f6482.7
Applied rewrites82.7%
Final simplification79.7%
(FPCore (eh ew t) :precision binary64 (let* ((t_1 (fabs (* eh (sin t))))) (if (<= t -4.8e-95) t_1 (if (<= t 6.5e-35) (/ 1.0 (fabs (/ 1.0 ew))) t_1))))
double code(double eh, double ew, double t) {
double t_1 = fabs((eh * sin(t)));
double tmp;
if (t <= -4.8e-95) {
tmp = t_1;
} else if (t <= 6.5e-35) {
tmp = 1.0 / fabs((1.0 / ew));
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(eh, ew, t)
real(8), intent (in) :: eh
real(8), intent (in) :: ew
real(8), intent (in) :: t
real(8) :: t_1
real(8) :: tmp
t_1 = abs((eh * sin(t)))
if (t <= (-4.8d-95)) then
tmp = t_1
else if (t <= 6.5d-35) then
tmp = 1.0d0 / abs((1.0d0 / ew))
else
tmp = t_1
end if
code = tmp
end function
public static double code(double eh, double ew, double t) {
double t_1 = Math.abs((eh * Math.sin(t)));
double tmp;
if (t <= -4.8e-95) {
tmp = t_1;
} else if (t <= 6.5e-35) {
tmp = 1.0 / Math.abs((1.0 / ew));
} else {
tmp = t_1;
}
return tmp;
}
def code(eh, ew, t): t_1 = math.fabs((eh * math.sin(t))) tmp = 0 if t <= -4.8e-95: tmp = t_1 elif t <= 6.5e-35: tmp = 1.0 / math.fabs((1.0 / ew)) else: tmp = t_1 return tmp
function code(eh, ew, t) t_1 = abs(Float64(eh * sin(t))) tmp = 0.0 if (t <= -4.8e-95) tmp = t_1; elseif (t <= 6.5e-35) tmp = Float64(1.0 / abs(Float64(1.0 / ew))); else tmp = t_1; end return tmp end
function tmp_2 = code(eh, ew, t) t_1 = abs((eh * sin(t))); tmp = 0.0; if (t <= -4.8e-95) tmp = t_1; elseif (t <= 6.5e-35) tmp = 1.0 / abs((1.0 / ew)); else tmp = t_1; end tmp_2 = tmp; end
code[eh_, ew_, t_] := Block[{t$95$1 = N[Abs[N[(eh * N[Sin[t], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[t, -4.8e-95], t$95$1, If[LessEqual[t, 6.5e-35], N[(1.0 / N[Abs[N[(1.0 / ew), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], t$95$1]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \left|eh \cdot \sin t\right|\\
\mathbf{if}\;t \leq -4.8 \cdot 10^{-95}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t \leq 6.5 \cdot 10^{-35}:\\
\;\;\;\;\frac{1}{\left|\frac{1}{ew}\right|}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if t < -4.8e-95 or 6.4999999999999999e-35 < t Initial program 99.7%
lift--.f64N/A
sub-negN/A
+-commutativeN/A
Applied rewrites64.6%
Taylor expanded in eh around inf
lower-*.f64N/A
lower-sin.f6461.3
Applied rewrites61.3%
if -4.8e-95 < t < 6.4999999999999999e-35Initial program 100.0%
Applied rewrites96.3%
Taylor expanded in t around 0
lower-/.f6485.5
Applied rewrites85.5%
(FPCore (eh ew t) :precision binary64 (let* ((t_1 (* eh (sin t)))) (if (<= t -8.5e+46) t_1 (if (<= t 7.2e-10) (/ 1.0 (fabs (/ 1.0 ew))) t_1))))
double code(double eh, double ew, double t) {
double t_1 = eh * sin(t);
double tmp;
if (t <= -8.5e+46) {
tmp = t_1;
} else if (t <= 7.2e-10) {
tmp = 1.0 / fabs((1.0 / ew));
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(eh, ew, t)
real(8), intent (in) :: eh
real(8), intent (in) :: ew
real(8), intent (in) :: t
real(8) :: t_1
real(8) :: tmp
t_1 = eh * sin(t)
if (t <= (-8.5d+46)) then
tmp = t_1
else if (t <= 7.2d-10) then
tmp = 1.0d0 / abs((1.0d0 / ew))
else
tmp = t_1
end if
code = tmp
end function
public static double code(double eh, double ew, double t) {
double t_1 = eh * Math.sin(t);
double tmp;
if (t <= -8.5e+46) {
tmp = t_1;
} else if (t <= 7.2e-10) {
tmp = 1.0 / Math.abs((1.0 / ew));
} else {
tmp = t_1;
}
return tmp;
}
def code(eh, ew, t): t_1 = eh * math.sin(t) tmp = 0 if t <= -8.5e+46: tmp = t_1 elif t <= 7.2e-10: tmp = 1.0 / math.fabs((1.0 / ew)) else: tmp = t_1 return tmp
function code(eh, ew, t) t_1 = Float64(eh * sin(t)) tmp = 0.0 if (t <= -8.5e+46) tmp = t_1; elseif (t <= 7.2e-10) tmp = Float64(1.0 / abs(Float64(1.0 / ew))); else tmp = t_1; end return tmp end
function tmp_2 = code(eh, ew, t) t_1 = eh * sin(t); tmp = 0.0; if (t <= -8.5e+46) tmp = t_1; elseif (t <= 7.2e-10) tmp = 1.0 / abs((1.0 / ew)); else tmp = t_1; end tmp_2 = tmp; end
code[eh_, ew_, t_] := Block[{t$95$1 = N[(eh * N[Sin[t], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t, -8.5e+46], t$95$1, If[LessEqual[t, 7.2e-10], N[(1.0 / N[Abs[N[(1.0 / ew), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], t$95$1]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := eh \cdot \sin t\\
\mathbf{if}\;t \leq -8.5 \cdot 10^{+46}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t \leq 7.2 \cdot 10^{-10}:\\
\;\;\;\;\frac{1}{\left|\frac{1}{ew}\right|}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if t < -8.4999999999999996e46 or 7.2e-10 < t Initial program 99.6%
lift--.f64N/A
sub-negN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-fma.f64N/A
Applied rewrites99.6%
Applied rewrites29.0%
Taylor expanded in ew around 0
lower-*.f64N/A
lower-sin.f6428.9
Applied rewrites28.9%
if -8.4999999999999996e46 < t < 7.2e-10Initial program 99.9%
Applied rewrites89.3%
Taylor expanded in t around 0
lower-/.f6471.8
Applied rewrites71.8%
(FPCore (eh ew t)
:precision binary64
(let* ((t_1 (/ 1.0 (fabs (/ 1.0 ew)))))
(if (<= ew -1.65e-183)
t_1
(if (<= ew 1.85e-142)
(/
1.0
(fabs
(/
1.0
(*
t
(fma
(* t t)
(fma
(* eh (* t t))
0.008333333333333333
(* eh -0.16666666666666666))
eh)))))
t_1))))
double code(double eh, double ew, double t) {
double t_1 = 1.0 / fabs((1.0 / ew));
double tmp;
if (ew <= -1.65e-183) {
tmp = t_1;
} else if (ew <= 1.85e-142) {
tmp = 1.0 / fabs((1.0 / (t * fma((t * t), fma((eh * (t * t)), 0.008333333333333333, (eh * -0.16666666666666666)), eh))));
} else {
tmp = t_1;
}
return tmp;
}
function code(eh, ew, t) t_1 = Float64(1.0 / abs(Float64(1.0 / ew))) tmp = 0.0 if (ew <= -1.65e-183) tmp = t_1; elseif (ew <= 1.85e-142) tmp = Float64(1.0 / abs(Float64(1.0 / Float64(t * fma(Float64(t * t), fma(Float64(eh * Float64(t * t)), 0.008333333333333333, Float64(eh * -0.16666666666666666)), eh))))); else tmp = t_1; end return tmp end
code[eh_, ew_, t_] := Block[{t$95$1 = N[(1.0 / N[Abs[N[(1.0 / ew), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[ew, -1.65e-183], t$95$1, If[LessEqual[ew, 1.85e-142], N[(1.0 / N[Abs[N[(1.0 / N[(t * N[(N[(t * t), $MachinePrecision] * N[(N[(eh * N[(t * t), $MachinePrecision]), $MachinePrecision] * 0.008333333333333333 + N[(eh * -0.16666666666666666), $MachinePrecision]), $MachinePrecision] + eh), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], t$95$1]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \frac{1}{\left|\frac{1}{ew}\right|}\\
\mathbf{if}\;ew \leq -1.65 \cdot 10^{-183}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;ew \leq 1.85 \cdot 10^{-142}:\\
\;\;\;\;\frac{1}{\left|\frac{1}{t \cdot \mathsf{fma}\left(t \cdot t, \mathsf{fma}\left(eh \cdot \left(t \cdot t\right), 0.008333333333333333, eh \cdot -0.16666666666666666\right), eh\right)}\right|}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if ew < -1.65e-183 or 1.84999999999999993e-142 < ew Initial program 99.8%
Applied rewrites81.6%
Taylor expanded in t around 0
lower-/.f6447.9
Applied rewrites47.9%
if -1.65e-183 < ew < 1.84999999999999993e-142Initial program 99.7%
Applied rewrites43.2%
Taylor expanded in ew around 0
lower-*.f64N/A
lower-sin.f6484.6
Applied rewrites84.6%
Taylor expanded in t around 0
Applied rewrites32.9%
Final simplification44.3%
(FPCore (eh ew t)
:precision binary64
(let* ((t_1 (/ 1.0 (fabs (/ 1.0 ew)))))
(if (<= ew -1.65e-183)
t_1
(if (<= ew 1.85e-142)
(/
1.0
(fabs (/ 1.0 (* t (fma -0.16666666666666666 (* eh (* t t)) eh)))))
t_1))))
double code(double eh, double ew, double t) {
double t_1 = 1.0 / fabs((1.0 / ew));
double tmp;
if (ew <= -1.65e-183) {
tmp = t_1;
} else if (ew <= 1.85e-142) {
tmp = 1.0 / fabs((1.0 / (t * fma(-0.16666666666666666, (eh * (t * t)), eh))));
} else {
tmp = t_1;
}
return tmp;
}
function code(eh, ew, t) t_1 = Float64(1.0 / abs(Float64(1.0 / ew))) tmp = 0.0 if (ew <= -1.65e-183) tmp = t_1; elseif (ew <= 1.85e-142) tmp = Float64(1.0 / abs(Float64(1.0 / Float64(t * fma(-0.16666666666666666, Float64(eh * Float64(t * t)), eh))))); else tmp = t_1; end return tmp end
code[eh_, ew_, t_] := Block[{t$95$1 = N[(1.0 / N[Abs[N[(1.0 / ew), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[ew, -1.65e-183], t$95$1, If[LessEqual[ew, 1.85e-142], N[(1.0 / N[Abs[N[(1.0 / N[(t * N[(-0.16666666666666666 * N[(eh * N[(t * t), $MachinePrecision]), $MachinePrecision] + eh), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], t$95$1]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \frac{1}{\left|\frac{1}{ew}\right|}\\
\mathbf{if}\;ew \leq -1.65 \cdot 10^{-183}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;ew \leq 1.85 \cdot 10^{-142}:\\
\;\;\;\;\frac{1}{\left|\frac{1}{t \cdot \mathsf{fma}\left(-0.16666666666666666, eh \cdot \left(t \cdot t\right), eh\right)}\right|}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if ew < -1.65e-183 or 1.84999999999999993e-142 < ew Initial program 99.8%
Applied rewrites81.6%
Taylor expanded in t around 0
lower-/.f6447.9
Applied rewrites47.9%
if -1.65e-183 < ew < 1.84999999999999993e-142Initial program 99.7%
Applied rewrites43.2%
Taylor expanded in ew around 0
lower-*.f64N/A
lower-sin.f6484.6
Applied rewrites84.6%
Taylor expanded in t around 0
Applied rewrites32.7%
Final simplification44.3%
(FPCore (eh ew t)
:precision binary64
(let* ((t_1 (/ 1.0 (fabs (/ 1.0 ew)))))
(if (<= ew -1.65e-183)
t_1
(if (<= ew 1.85e-142) (/ 1.0 (fabs (/ 1.0 (* t eh)))) t_1))))
double code(double eh, double ew, double t) {
double t_1 = 1.0 / fabs((1.0 / ew));
double tmp;
if (ew <= -1.65e-183) {
tmp = t_1;
} else if (ew <= 1.85e-142) {
tmp = 1.0 / fabs((1.0 / (t * eh)));
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(eh, ew, t)
real(8), intent (in) :: eh
real(8), intent (in) :: ew
real(8), intent (in) :: t
real(8) :: t_1
real(8) :: tmp
t_1 = 1.0d0 / abs((1.0d0 / ew))
if (ew <= (-1.65d-183)) then
tmp = t_1
else if (ew <= 1.85d-142) then
tmp = 1.0d0 / abs((1.0d0 / (t * eh)))
else
tmp = t_1
end if
code = tmp
end function
public static double code(double eh, double ew, double t) {
double t_1 = 1.0 / Math.abs((1.0 / ew));
double tmp;
if (ew <= -1.65e-183) {
tmp = t_1;
} else if (ew <= 1.85e-142) {
tmp = 1.0 / Math.abs((1.0 / (t * eh)));
} else {
tmp = t_1;
}
return tmp;
}
def code(eh, ew, t): t_1 = 1.0 / math.fabs((1.0 / ew)) tmp = 0 if ew <= -1.65e-183: tmp = t_1 elif ew <= 1.85e-142: tmp = 1.0 / math.fabs((1.0 / (t * eh))) else: tmp = t_1 return tmp
function code(eh, ew, t) t_1 = Float64(1.0 / abs(Float64(1.0 / ew))) tmp = 0.0 if (ew <= -1.65e-183) tmp = t_1; elseif (ew <= 1.85e-142) tmp = Float64(1.0 / abs(Float64(1.0 / Float64(t * eh)))); else tmp = t_1; end return tmp end
function tmp_2 = code(eh, ew, t) t_1 = 1.0 / abs((1.0 / ew)); tmp = 0.0; if (ew <= -1.65e-183) tmp = t_1; elseif (ew <= 1.85e-142) tmp = 1.0 / abs((1.0 / (t * eh))); else tmp = t_1; end tmp_2 = tmp; end
code[eh_, ew_, t_] := Block[{t$95$1 = N[(1.0 / N[Abs[N[(1.0 / ew), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[ew, -1.65e-183], t$95$1, If[LessEqual[ew, 1.85e-142], N[(1.0 / N[Abs[N[(1.0 / N[(t * eh), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], t$95$1]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \frac{1}{\left|\frac{1}{ew}\right|}\\
\mathbf{if}\;ew \leq -1.65 \cdot 10^{-183}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;ew \leq 1.85 \cdot 10^{-142}:\\
\;\;\;\;\frac{1}{\left|\frac{1}{t \cdot eh}\right|}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if ew < -1.65e-183 or 1.84999999999999993e-142 < ew Initial program 99.8%
Applied rewrites81.6%
Taylor expanded in t around 0
lower-/.f6447.9
Applied rewrites47.9%
if -1.65e-183 < ew < 1.84999999999999993e-142Initial program 99.7%
Applied rewrites43.2%
Taylor expanded in ew around 0
lower-*.f64N/A
lower-sin.f6484.6
Applied rewrites84.6%
Taylor expanded in t around 0
Applied rewrites32.6%
(FPCore (eh ew t) :precision binary64 (/ 1.0 (fabs (/ 1.0 ew))))
double code(double eh, double ew, double t) {
return 1.0 / fabs((1.0 / ew));
}
real(8) function code(eh, ew, t)
real(8), intent (in) :: eh
real(8), intent (in) :: ew
real(8), intent (in) :: t
code = 1.0d0 / abs((1.0d0 / ew))
end function
public static double code(double eh, double ew, double t) {
return 1.0 / Math.abs((1.0 / ew));
}
def code(eh, ew, t): return 1.0 / math.fabs((1.0 / ew))
function code(eh, ew, t) return Float64(1.0 / abs(Float64(1.0 / ew))) end
function tmp = code(eh, ew, t) tmp = 1.0 / abs((1.0 / ew)); end
code[eh_, ew_, t_] := N[(1.0 / N[Abs[N[(1.0 / ew), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{1}{\left|\frac{1}{ew}\right|}
\end{array}
Initial program 99.8%
Applied rewrites72.4%
Taylor expanded in t around 0
lower-/.f6440.4
Applied rewrites40.4%
(FPCore (eh ew t) :precision binary64 (fma (* t t) (* ew -0.5) ew))
double code(double eh, double ew, double t) {
return fma((t * t), (ew * -0.5), ew);
}
function code(eh, ew, t) return fma(Float64(t * t), Float64(ew * -0.5), ew) end
code[eh_, ew_, t_] := N[(N[(t * t), $MachinePrecision] * N[(ew * -0.5), $MachinePrecision] + ew), $MachinePrecision]
\begin{array}{l}
\\
\mathsf{fma}\left(t \cdot t, ew \cdot -0.5, ew\right)
\end{array}
Initial program 99.8%
lift--.f64N/A
sub-negN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-fma.f64N/A
Applied rewrites99.8%
Applied rewrites38.0%
Taylor expanded in t around 0
+-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f64N/A
+-commutativeN/A
distribute-lft1-inN/A
metadata-evalN/A
lower-fma.f64N/A
lower-/.f64N/A
unpow2N/A
lower-*.f64N/A
lower-*.f6419.2
Applied rewrites19.2%
Taylor expanded in eh around 0
Applied rewrites20.6%
Final simplification20.6%
herbie shell --seed 2024227
(FPCore (eh ew t)
:name "Example 2 from Robby"
:precision binary64
(fabs (- (* (* ew (cos t)) (cos (atan (/ (* (- eh) (tan t)) ew)))) (* (* eh (sin t)) (sin (atan (/ (* (- eh) (tan t)) ew)))))))