
(FPCore (z0 z1 z2) :precision binary64 (/ z0 (* z1 (* z2 PI))))
double code(double z0, double z1, double z2) {
return z0 / (z1 * (z2 * ((double) M_PI)));
}
public static double code(double z0, double z1, double z2) {
return z0 / (z1 * (z2 * Math.PI));
}
def code(z0, z1, z2): return z0 / (z1 * (z2 * math.pi))
function code(z0, z1, z2) return Float64(z0 / Float64(z1 * Float64(z2 * pi))) end
function tmp = code(z0, z1, z2) tmp = z0 / (z1 * (z2 * pi)); end
code[z0_, z1_, z2_] := N[(z0 / N[(z1 * N[(z2 * Pi), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\frac{z0}{z1 \cdot \left(z2 \cdot \pi\right)}
Herbie found 7 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (z0 z1 z2) :precision binary64 (/ z0 (* z1 (* z2 PI))))
double code(double z0, double z1, double z2) {
return z0 / (z1 * (z2 * ((double) M_PI)));
}
public static double code(double z0, double z1, double z2) {
return z0 / (z1 * (z2 * Math.PI));
}
def code(z0, z1, z2): return z0 / (z1 * (z2 * math.pi))
function code(z0, z1, z2) return Float64(z0 / Float64(z1 * Float64(z2 * pi))) end
function tmp = code(z0, z1, z2) tmp = z0 / (z1 * (z2 * pi)); end
code[z0_, z1_, z2_] := N[(z0 / N[(z1 * N[(z2 * Pi), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\frac{z0}{z1 \cdot \left(z2 \cdot \pi\right)}
(FPCore (z0 z1 z2)
:precision binary64
(let* ((t_0 (fmin (fabs z1) (fabs z2)))
(t_1 (fmax (fabs z1) (fabs z2))))
(*
(copysign 1 z0)
(*
(copysign 1 z1)
(*
(copysign 1 z2)
(if (<= (fabs z0) 7737125245533627/154742504910672534362390528)
(/ (/ (/ (- (fabs z0)) PI) t_0) (- t_1))
(/ (/ (fabs z0) t_1) (* PI t_0))))))))double code(double z0, double z1, double z2) {
double t_0 = fmin(fabs(z1), fabs(z2));
double t_1 = fmax(fabs(z1), fabs(z2));
double tmp;
if (fabs(z0) <= 5e-11) {
tmp = ((-fabs(z0) / ((double) M_PI)) / t_0) / -t_1;
} else {
tmp = (fabs(z0) / t_1) / (((double) M_PI) * t_0);
}
return copysign(1.0, z0) * (copysign(1.0, z1) * (copysign(1.0, z2) * tmp));
}
public static double code(double z0, double z1, double z2) {
double t_0 = fmin(Math.abs(z1), Math.abs(z2));
double t_1 = fmax(Math.abs(z1), Math.abs(z2));
double tmp;
if (Math.abs(z0) <= 5e-11) {
tmp = ((-Math.abs(z0) / Math.PI) / t_0) / -t_1;
} else {
tmp = (Math.abs(z0) / t_1) / (Math.PI * t_0);
}
return Math.copySign(1.0, z0) * (Math.copySign(1.0, z1) * (Math.copySign(1.0, z2) * tmp));
}
def code(z0, z1, z2): t_0 = fmin(math.fabs(z1), math.fabs(z2)) t_1 = fmax(math.fabs(z1), math.fabs(z2)) tmp = 0 if math.fabs(z0) <= 5e-11: tmp = ((-math.fabs(z0) / math.pi) / t_0) / -t_1 else: tmp = (math.fabs(z0) / t_1) / (math.pi * t_0) return math.copysign(1.0, z0) * (math.copysign(1.0, z1) * (math.copysign(1.0, z2) * tmp))
function code(z0, z1, z2) t_0 = fmin(abs(z1), abs(z2)) t_1 = fmax(abs(z1), abs(z2)) tmp = 0.0 if (abs(z0) <= 5e-11) tmp = Float64(Float64(Float64(Float64(-abs(z0)) / pi) / t_0) / Float64(-t_1)); else tmp = Float64(Float64(abs(z0) / t_1) / Float64(pi * t_0)); end return Float64(copysign(1.0, z0) * Float64(copysign(1.0, z1) * Float64(copysign(1.0, z2) * tmp))) end
function tmp_2 = code(z0, z1, z2) t_0 = min(abs(z1), abs(z2)); t_1 = max(abs(z1), abs(z2)); tmp = 0.0; if (abs(z0) <= 5e-11) tmp = ((-abs(z0) / pi) / t_0) / -t_1; else tmp = (abs(z0) / t_1) / (pi * t_0); end tmp_2 = (sign(z0) * abs(1.0)) * ((sign(z1) * abs(1.0)) * ((sign(z2) * abs(1.0)) * tmp)); end
code[z0_, z1_, z2_] := Block[{t$95$0 = N[Min[N[Abs[z1], $MachinePrecision], N[Abs[z2], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[Max[N[Abs[z1], $MachinePrecision], N[Abs[z2], $MachinePrecision]], $MachinePrecision]}, N[(N[With[{TMP1 = Abs[1], TMP2 = Sign[z0]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * N[(N[With[{TMP1 = Abs[1], TMP2 = Sign[z1]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * N[(N[With[{TMP1 = Abs[1], TMP2 = Sign[z2]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[N[Abs[z0], $MachinePrecision], 7737125245533627/154742504910672534362390528], N[(N[(N[((-N[Abs[z0], $MachinePrecision]) / Pi), $MachinePrecision] / t$95$0), $MachinePrecision] / (-t$95$1)), $MachinePrecision], N[(N[(N[Abs[z0], $MachinePrecision] / t$95$1), $MachinePrecision] / N[(Pi * t$95$0), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
t_0 := \mathsf{min}\left(\left|z1\right|, \left|z2\right|\right)\\
t_1 := \mathsf{max}\left(\left|z1\right|, \left|z2\right|\right)\\
\mathsf{copysign}\left(1, z0\right) \cdot \left(\mathsf{copysign}\left(1, z1\right) \cdot \left(\mathsf{copysign}\left(1, z2\right) \cdot \begin{array}{l}
\mathbf{if}\;\left|z0\right| \leq \frac{7737125245533627}{154742504910672534362390528}:\\
\;\;\;\;\frac{\frac{\frac{-\left|z0\right|}{\pi}}{t\_0}}{-t\_1}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\left|z0\right|}{t\_1}}{\pi \cdot t\_0}\\
\end{array}\right)\right)
\end{array}
if z0 < 5.0000000000000002e-11Initial program 92.3%
lift-/.f64N/A
lift-*.f64N/A
associate-/r*N/A
lift-*.f64N/A
associate-/r*N/A
lower-/.f64N/A
associate-/l/N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f6492.3%
Applied rewrites92.3%
lift-/.f64N/A
mult-flipN/A
lift-/.f64N/A
associate-*l/N/A
mult-flipN/A
frac-2negN/A
lift-*.f64N/A
*-commutativeN/A
distribute-rgt-neg-inN/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f64N/A
distribute-neg-fracN/A
lower-/.f64N/A
lower-neg.f64N/A
lower-neg.f6491.4%
Applied rewrites91.4%
if 5.0000000000000002e-11 < z0 Initial program 92.3%
lift-/.f64N/A
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*l*N/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f64N/A
lower-*.f6491.9%
Applied rewrites91.9%
(FPCore (z0 z1 z2)
:precision binary64
(let* ((t_0 (fmin (fabs z1) (fabs z2)))
(t_1 (fmax (fabs z1) (fabs z2))))
(*
(copysign 1 z0)
(*
(copysign 1 z1)
(*
(copysign 1 z2)
(if (<= (/ (fabs z0) (* t_0 (* t_1 PI))) 2000000000000000000)
(/ 1 (* (* (/ t_0 (fabs z0)) t_1) PI))
(/ (/ (fabs z0) t_1) (* PI t_0))))))))double code(double z0, double z1, double z2) {
double t_0 = fmin(fabs(z1), fabs(z2));
double t_1 = fmax(fabs(z1), fabs(z2));
double tmp;
if ((fabs(z0) / (t_0 * (t_1 * ((double) M_PI)))) <= 2e+18) {
tmp = 1.0 / (((t_0 / fabs(z0)) * t_1) * ((double) M_PI));
} else {
tmp = (fabs(z0) / t_1) / (((double) M_PI) * t_0);
}
return copysign(1.0, z0) * (copysign(1.0, z1) * (copysign(1.0, z2) * tmp));
}
public static double code(double z0, double z1, double z2) {
double t_0 = fmin(Math.abs(z1), Math.abs(z2));
double t_1 = fmax(Math.abs(z1), Math.abs(z2));
double tmp;
if ((Math.abs(z0) / (t_0 * (t_1 * Math.PI))) <= 2e+18) {
tmp = 1.0 / (((t_0 / Math.abs(z0)) * t_1) * Math.PI);
} else {
tmp = (Math.abs(z0) / t_1) / (Math.PI * t_0);
}
return Math.copySign(1.0, z0) * (Math.copySign(1.0, z1) * (Math.copySign(1.0, z2) * tmp));
}
def code(z0, z1, z2): t_0 = fmin(math.fabs(z1), math.fabs(z2)) t_1 = fmax(math.fabs(z1), math.fabs(z2)) tmp = 0 if (math.fabs(z0) / (t_0 * (t_1 * math.pi))) <= 2e+18: tmp = 1.0 / (((t_0 / math.fabs(z0)) * t_1) * math.pi) else: tmp = (math.fabs(z0) / t_1) / (math.pi * t_0) return math.copysign(1.0, z0) * (math.copysign(1.0, z1) * (math.copysign(1.0, z2) * tmp))
function code(z0, z1, z2) t_0 = fmin(abs(z1), abs(z2)) t_1 = fmax(abs(z1), abs(z2)) tmp = 0.0 if (Float64(abs(z0) / Float64(t_0 * Float64(t_1 * pi))) <= 2e+18) tmp = Float64(1.0 / Float64(Float64(Float64(t_0 / abs(z0)) * t_1) * pi)); else tmp = Float64(Float64(abs(z0) / t_1) / Float64(pi * t_0)); end return Float64(copysign(1.0, z0) * Float64(copysign(1.0, z1) * Float64(copysign(1.0, z2) * tmp))) end
function tmp_2 = code(z0, z1, z2) t_0 = min(abs(z1), abs(z2)); t_1 = max(abs(z1), abs(z2)); tmp = 0.0; if ((abs(z0) / (t_0 * (t_1 * pi))) <= 2e+18) tmp = 1.0 / (((t_0 / abs(z0)) * t_1) * pi); else tmp = (abs(z0) / t_1) / (pi * t_0); end tmp_2 = (sign(z0) * abs(1.0)) * ((sign(z1) * abs(1.0)) * ((sign(z2) * abs(1.0)) * tmp)); end
code[z0_, z1_, z2_] := Block[{t$95$0 = N[Min[N[Abs[z1], $MachinePrecision], N[Abs[z2], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[Max[N[Abs[z1], $MachinePrecision], N[Abs[z2], $MachinePrecision]], $MachinePrecision]}, N[(N[With[{TMP1 = Abs[1], TMP2 = Sign[z0]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * N[(N[With[{TMP1 = Abs[1], TMP2 = Sign[z1]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * N[(N[With[{TMP1 = Abs[1], TMP2 = Sign[z2]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[N[(N[Abs[z0], $MachinePrecision] / N[(t$95$0 * N[(t$95$1 * Pi), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2000000000000000000], N[(1 / N[(N[(N[(t$95$0 / N[Abs[z0], $MachinePrecision]), $MachinePrecision] * t$95$1), $MachinePrecision] * Pi), $MachinePrecision]), $MachinePrecision], N[(N[(N[Abs[z0], $MachinePrecision] / t$95$1), $MachinePrecision] / N[(Pi * t$95$0), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
t_0 := \mathsf{min}\left(\left|z1\right|, \left|z2\right|\right)\\
t_1 := \mathsf{max}\left(\left|z1\right|, \left|z2\right|\right)\\
\mathsf{copysign}\left(1, z0\right) \cdot \left(\mathsf{copysign}\left(1, z1\right) \cdot \left(\mathsf{copysign}\left(1, z2\right) \cdot \begin{array}{l}
\mathbf{if}\;\frac{\left|z0\right|}{t\_0 \cdot \left(t\_1 \cdot \pi\right)} \leq 2000000000000000000:\\
\;\;\;\;\frac{1}{\left(\frac{t\_0}{\left|z0\right|} \cdot t\_1\right) \cdot \pi}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\left|z0\right|}{t\_1}}{\pi \cdot t\_0}\\
\end{array}\right)\right)
\end{array}
if (/.f64 z0 (*.f64 z1 (*.f64 z2 (PI.f64)))) < 2e18Initial program 92.3%
lift-/.f64N/A
div-flipN/A
lower-unsound-/.f64N/A
lower-unsound-/.f6492.0%
lift-*.f64N/A
*-commutativeN/A
lower-*.f6492.0%
lift-*.f64N/A
*-commutativeN/A
lower-*.f6492.0%
Applied rewrites92.0%
lift-/.f64N/A
mult-flipN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
mult-flip-revN/A
lift-*.f64N/A
associate-/l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f6491.0%
Applied rewrites91.0%
if 2e18 < (/.f64 z0 (*.f64 z1 (*.f64 z2 (PI.f64)))) Initial program 92.3%
lift-/.f64N/A
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*l*N/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f64N/A
lower-*.f6491.9%
Applied rewrites91.9%
(FPCore (z0 z1 z2)
:precision binary64
(let* ((t_0 (fmin (fabs z1) (fabs z2)))
(t_1 (fmax (fabs z1) (fabs z2))))
(*
(copysign 1 z0)
(*
(copysign 1 z1)
(*
(copysign 1 z2)
(if (<= (fabs z0) 7737125245533627/154742504910672534362390528)
(/ (/ (fabs z0) t_0) (* PI t_1))
(/ (/ (fabs z0) t_1) (* PI t_0))))))))double code(double z0, double z1, double z2) {
double t_0 = fmin(fabs(z1), fabs(z2));
double t_1 = fmax(fabs(z1), fabs(z2));
double tmp;
if (fabs(z0) <= 5e-11) {
tmp = (fabs(z0) / t_0) / (((double) M_PI) * t_1);
} else {
tmp = (fabs(z0) / t_1) / (((double) M_PI) * t_0);
}
return copysign(1.0, z0) * (copysign(1.0, z1) * (copysign(1.0, z2) * tmp));
}
public static double code(double z0, double z1, double z2) {
double t_0 = fmin(Math.abs(z1), Math.abs(z2));
double t_1 = fmax(Math.abs(z1), Math.abs(z2));
double tmp;
if (Math.abs(z0) <= 5e-11) {
tmp = (Math.abs(z0) / t_0) / (Math.PI * t_1);
} else {
tmp = (Math.abs(z0) / t_1) / (Math.PI * t_0);
}
return Math.copySign(1.0, z0) * (Math.copySign(1.0, z1) * (Math.copySign(1.0, z2) * tmp));
}
def code(z0, z1, z2): t_0 = fmin(math.fabs(z1), math.fabs(z2)) t_1 = fmax(math.fabs(z1), math.fabs(z2)) tmp = 0 if math.fabs(z0) <= 5e-11: tmp = (math.fabs(z0) / t_0) / (math.pi * t_1) else: tmp = (math.fabs(z0) / t_1) / (math.pi * t_0) return math.copysign(1.0, z0) * (math.copysign(1.0, z1) * (math.copysign(1.0, z2) * tmp))
function code(z0, z1, z2) t_0 = fmin(abs(z1), abs(z2)) t_1 = fmax(abs(z1), abs(z2)) tmp = 0.0 if (abs(z0) <= 5e-11) tmp = Float64(Float64(abs(z0) / t_0) / Float64(pi * t_1)); else tmp = Float64(Float64(abs(z0) / t_1) / Float64(pi * t_0)); end return Float64(copysign(1.0, z0) * Float64(copysign(1.0, z1) * Float64(copysign(1.0, z2) * tmp))) end
function tmp_2 = code(z0, z1, z2) t_0 = min(abs(z1), abs(z2)); t_1 = max(abs(z1), abs(z2)); tmp = 0.0; if (abs(z0) <= 5e-11) tmp = (abs(z0) / t_0) / (pi * t_1); else tmp = (abs(z0) / t_1) / (pi * t_0); end tmp_2 = (sign(z0) * abs(1.0)) * ((sign(z1) * abs(1.0)) * ((sign(z2) * abs(1.0)) * tmp)); end
code[z0_, z1_, z2_] := Block[{t$95$0 = N[Min[N[Abs[z1], $MachinePrecision], N[Abs[z2], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[Max[N[Abs[z1], $MachinePrecision], N[Abs[z2], $MachinePrecision]], $MachinePrecision]}, N[(N[With[{TMP1 = Abs[1], TMP2 = Sign[z0]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * N[(N[With[{TMP1 = Abs[1], TMP2 = Sign[z1]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * N[(N[With[{TMP1 = Abs[1], TMP2 = Sign[z2]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[N[Abs[z0], $MachinePrecision], 7737125245533627/154742504910672534362390528], N[(N[(N[Abs[z0], $MachinePrecision] / t$95$0), $MachinePrecision] / N[(Pi * t$95$1), $MachinePrecision]), $MachinePrecision], N[(N[(N[Abs[z0], $MachinePrecision] / t$95$1), $MachinePrecision] / N[(Pi * t$95$0), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
t_0 := \mathsf{min}\left(\left|z1\right|, \left|z2\right|\right)\\
t_1 := \mathsf{max}\left(\left|z1\right|, \left|z2\right|\right)\\
\mathsf{copysign}\left(1, z0\right) \cdot \left(\mathsf{copysign}\left(1, z1\right) \cdot \left(\mathsf{copysign}\left(1, z2\right) \cdot \begin{array}{l}
\mathbf{if}\;\left|z0\right| \leq \frac{7737125245533627}{154742504910672534362390528}:\\
\;\;\;\;\frac{\frac{\left|z0\right|}{t\_0}}{\pi \cdot t\_1}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\left|z0\right|}{t\_1}}{\pi \cdot t\_0}\\
\end{array}\right)\right)
\end{array}
if z0 < 5.0000000000000002e-11Initial program 92.3%
lift-/.f64N/A
lift-*.f64N/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f6491.4%
lift-*.f64N/A
*-commutativeN/A
lower-*.f6491.4%
Applied rewrites91.4%
if 5.0000000000000002e-11 < z0 Initial program 92.3%
lift-/.f64N/A
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*l*N/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f64N/A
lower-*.f6491.9%
Applied rewrites91.9%
(FPCore (z0 z1 z2)
:precision binary64
(let* ((t_0 (fmax (fabs z1) (fabs z2)))
(t_1 (fmin (fabs z1) (fabs z2)))
(t_2 (/ (/ z0 t_1) (* PI t_0)))
(t_3 (* t_1 (* t_0 PI))))
(*
(copysign 1 z1)
(*
(copysign 1 z2)
(if (<=
t_3
4388899255034951/21944496275174754733023745004748837080297570543729328280448007953824789527038691788660702798145451174453138901351488446979832735450978591612896414872982681198457994802840025058142360791167736098566050165049439180766375815715632675961171034001565824849041810386302038359368560295224574744242597208206082048)
t_2
(if (<=
t_3
99999999999999995981677400789769932612359931733321583285118877944076548466448094957909476304960015890806678857380756006307062602577317320133875536163700284518967198097453618232695975663570046546450378657742479671982722077174989256760731188933351130765773907040474247261585408)
(/ z0 (* (* PI t_1) t_0))
t_2))))))double code(double z0, double z1, double z2) {
double t_0 = fmax(fabs(z1), fabs(z2));
double t_1 = fmin(fabs(z1), fabs(z2));
double t_2 = (z0 / t_1) / (((double) M_PI) * t_0);
double t_3 = t_1 * (t_0 * ((double) M_PI));
double tmp;
if (t_3 <= 2e-289) {
tmp = t_2;
} else if (t_3 <= 1e+275) {
tmp = z0 / ((((double) M_PI) * t_1) * t_0);
} else {
tmp = t_2;
}
return copysign(1.0, z1) * (copysign(1.0, z2) * tmp);
}
public static double code(double z0, double z1, double z2) {
double t_0 = fmax(Math.abs(z1), Math.abs(z2));
double t_1 = fmin(Math.abs(z1), Math.abs(z2));
double t_2 = (z0 / t_1) / (Math.PI * t_0);
double t_3 = t_1 * (t_0 * Math.PI);
double tmp;
if (t_3 <= 2e-289) {
tmp = t_2;
} else if (t_3 <= 1e+275) {
tmp = z0 / ((Math.PI * t_1) * t_0);
} else {
tmp = t_2;
}
return Math.copySign(1.0, z1) * (Math.copySign(1.0, z2) * tmp);
}
def code(z0, z1, z2): t_0 = fmax(math.fabs(z1), math.fabs(z2)) t_1 = fmin(math.fabs(z1), math.fabs(z2)) t_2 = (z0 / t_1) / (math.pi * t_0) t_3 = t_1 * (t_0 * math.pi) tmp = 0 if t_3 <= 2e-289: tmp = t_2 elif t_3 <= 1e+275: tmp = z0 / ((math.pi * t_1) * t_0) else: tmp = t_2 return math.copysign(1.0, z1) * (math.copysign(1.0, z2) * tmp)
function code(z0, z1, z2) t_0 = fmax(abs(z1), abs(z2)) t_1 = fmin(abs(z1), abs(z2)) t_2 = Float64(Float64(z0 / t_1) / Float64(pi * t_0)) t_3 = Float64(t_1 * Float64(t_0 * pi)) tmp = 0.0 if (t_3 <= 2e-289) tmp = t_2; elseif (t_3 <= 1e+275) tmp = Float64(z0 / Float64(Float64(pi * t_1) * t_0)); else tmp = t_2; end return Float64(copysign(1.0, z1) * Float64(copysign(1.0, z2) * tmp)) end
function tmp_2 = code(z0, z1, z2) t_0 = max(abs(z1), abs(z2)); t_1 = min(abs(z1), abs(z2)); t_2 = (z0 / t_1) / (pi * t_0); t_3 = t_1 * (t_0 * pi); tmp = 0.0; if (t_3 <= 2e-289) tmp = t_2; elseif (t_3 <= 1e+275) tmp = z0 / ((pi * t_1) * t_0); else tmp = t_2; end tmp_2 = (sign(z1) * abs(1.0)) * ((sign(z2) * abs(1.0)) * tmp); end
code[z0_, z1_, z2_] := Block[{t$95$0 = N[Max[N[Abs[z1], $MachinePrecision], N[Abs[z2], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[Min[N[Abs[z1], $MachinePrecision], N[Abs[z2], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(N[(z0 / t$95$1), $MachinePrecision] / N[(Pi * t$95$0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(t$95$1 * N[(t$95$0 * Pi), $MachinePrecision]), $MachinePrecision]}, N[(N[With[{TMP1 = Abs[1], TMP2 = Sign[z1]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * N[(N[With[{TMP1 = Abs[1], TMP2 = Sign[z2]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[t$95$3, 4388899255034951/21944496275174754733023745004748837080297570543729328280448007953824789527038691788660702798145451174453138901351488446979832735450978591612896414872982681198457994802840025058142360791167736098566050165049439180766375815715632675961171034001565824849041810386302038359368560295224574744242597208206082048], t$95$2, If[LessEqual[t$95$3, 99999999999999995981677400789769932612359931733321583285118877944076548466448094957909476304960015890806678857380756006307062602577317320133875536163700284518967198097453618232695975663570046546450378657742479671982722077174989256760731188933351130765773907040474247261585408], N[(z0 / N[(N[(Pi * t$95$1), $MachinePrecision] * t$95$0), $MachinePrecision]), $MachinePrecision], t$95$2]]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
t_0 := \mathsf{max}\left(\left|z1\right|, \left|z2\right|\right)\\
t_1 := \mathsf{min}\left(\left|z1\right|, \left|z2\right|\right)\\
t_2 := \frac{\frac{z0}{t\_1}}{\pi \cdot t\_0}\\
t_3 := t\_1 \cdot \left(t\_0 \cdot \pi\right)\\
\mathsf{copysign}\left(1, z1\right) \cdot \left(\mathsf{copysign}\left(1, z2\right) \cdot \begin{array}{l}
\mathbf{if}\;t\_3 \leq \frac{4388899255034951}{21944496275174754733023745004748837080297570543729328280448007953824789527038691788660702798145451174453138901351488446979832735450978591612896414872982681198457994802840025058142360791167736098566050165049439180766375815715632675961171034001565824849041810386302038359368560295224574744242597208206082048}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;t\_3 \leq 99999999999999995981677400789769932612359931733321583285118877944076548466448094957909476304960015890806678857380756006307062602577317320133875536163700284518967198097453618232695975663570046546450378657742479671982722077174989256760731188933351130765773907040474247261585408:\\
\;\;\;\;\frac{z0}{\left(\pi \cdot t\_1\right) \cdot t\_0}\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}\right)
\end{array}
if (*.f64 z1 (*.f64 z2 (PI.f64))) < 2e-289 or 9.9999999999999996e274 < (*.f64 z1 (*.f64 z2 (PI.f64))) Initial program 92.3%
lift-/.f64N/A
lift-*.f64N/A
associate-/r*N/A
lower-/.f64N/A
lower-/.f6491.4%
lift-*.f64N/A
*-commutativeN/A
lower-*.f6491.4%
Applied rewrites91.4%
if 2e-289 < (*.f64 z1 (*.f64 z2 (PI.f64))) < 9.9999999999999996e274Initial program 92.3%
lift-*.f64N/A
lift-*.f64N/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f6492.4%
Applied rewrites92.4%
(FPCore (z0 z1 z2) :precision binary64 (* (copysign 1 z1) (* (copysign 1 z2) (/ z0 (* (* PI (fmin (fabs z1) (fabs z2))) (fmax (fabs z1) (fabs z2)))))))
double code(double z0, double z1, double z2) {
return copysign(1.0, z1) * (copysign(1.0, z2) * (z0 / ((((double) M_PI) * fmin(fabs(z1), fabs(z2))) * fmax(fabs(z1), fabs(z2)))));
}
public static double code(double z0, double z1, double z2) {
return Math.copySign(1.0, z1) * (Math.copySign(1.0, z2) * (z0 / ((Math.PI * fmin(Math.abs(z1), Math.abs(z2))) * fmax(Math.abs(z1), Math.abs(z2)))));
}
def code(z0, z1, z2): return math.copysign(1.0, z1) * (math.copysign(1.0, z2) * (z0 / ((math.pi * fmin(math.fabs(z1), math.fabs(z2))) * fmax(math.fabs(z1), math.fabs(z2)))))
function code(z0, z1, z2) return Float64(copysign(1.0, z1) * Float64(copysign(1.0, z2) * Float64(z0 / Float64(Float64(pi * fmin(abs(z1), abs(z2))) * fmax(abs(z1), abs(z2)))))) end
function tmp = code(z0, z1, z2) tmp = (sign(z1) * abs(1.0)) * ((sign(z2) * abs(1.0)) * (z0 / ((pi * min(abs(z1), abs(z2))) * max(abs(z1), abs(z2))))); end
code[z0_, z1_, z2_] := N[(N[With[{TMP1 = Abs[1], TMP2 = Sign[z1]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * N[(N[With[{TMP1 = Abs[1], TMP2 = Sign[z2]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * N[(z0 / N[(N[(Pi * N[Min[N[Abs[z1], $MachinePrecision], N[Abs[z2], $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * N[Max[N[Abs[z1], $MachinePrecision], N[Abs[z2], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\mathsf{copysign}\left(1, z1\right) \cdot \left(\mathsf{copysign}\left(1, z2\right) \cdot \frac{z0}{\left(\pi \cdot \mathsf{min}\left(\left|z1\right|, \left|z2\right|\right)\right) \cdot \mathsf{max}\left(\left|z1\right|, \left|z2\right|\right)}\right)
Initial program 92.3%
lift-*.f64N/A
lift-*.f64N/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f6492.4%
Applied rewrites92.4%
(FPCore (z0 z1 z2) :precision binary64 (/ z0 (* (* z2 z1) PI)))
double code(double z0, double z1, double z2) {
return z0 / ((z2 * z1) * ((double) M_PI));
}
public static double code(double z0, double z1, double z2) {
return z0 / ((z2 * z1) * Math.PI);
}
def code(z0, z1, z2): return z0 / ((z2 * z1) * math.pi)
function code(z0, z1, z2) return Float64(z0 / Float64(Float64(z2 * z1) * pi)) end
function tmp = code(z0, z1, z2) tmp = z0 / ((z2 * z1) * pi); end
code[z0_, z1_, z2_] := N[(z0 / N[(N[(z2 * z1), $MachinePrecision] * Pi), $MachinePrecision]), $MachinePrecision]
\frac{z0}{\left(z2 \cdot z1\right) \cdot \pi}
Initial program 92.3%
lift-*.f64N/A
lift-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f6492.4%
Applied rewrites92.4%
(FPCore (z0 z1 z2) :precision binary64 (/ z0 (* (fmin z1 z2) (* (fmax z1 z2) PI))))
double code(double z0, double z1, double z2) {
return z0 / (fmin(z1, z2) * (fmax(z1, z2) * ((double) M_PI)));
}
public static double code(double z0, double z1, double z2) {
return z0 / (fmin(z1, z2) * (fmax(z1, z2) * Math.PI));
}
def code(z0, z1, z2): return z0 / (fmin(z1, z2) * (fmax(z1, z2) * math.pi))
function code(z0, z1, z2) return Float64(z0 / Float64(fmin(z1, z2) * Float64(fmax(z1, z2) * pi))) end
function tmp = code(z0, z1, z2) tmp = z0 / (min(z1, z2) * (max(z1, z2) * pi)); end
code[z0_, z1_, z2_] := N[(z0 / N[(N[Min[z1, z2], $MachinePrecision] * N[(N[Max[z1, z2], $MachinePrecision] * Pi), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\frac{z0}{\mathsf{min}\left(z1, z2\right) \cdot \left(\mathsf{max}\left(z1, z2\right) \cdot \pi\right)}
Initial program 92.3%
herbie shell --seed 2025277 -o generate:taylor -o generate:evaluate
(FPCore (z0 z1 z2)
:name "(/ z0 (* z1 (* z2 PI)))"
:precision binary64
(/ z0 (* z1 (* z2 PI))))