
(FPCore (x) :precision binary64 (- (/ PI 2.0) (* 2.0 (asin (sqrt (/ (- 1.0 x) 2.0))))))
double code(double x) {
return (((double) M_PI) / 2.0) - (2.0 * asin(sqrt(((1.0 - x) / 2.0))));
}
public static double code(double x) {
return (Math.PI / 2.0) - (2.0 * Math.asin(Math.sqrt(((1.0 - x) / 2.0))));
}
def code(x): return (math.pi / 2.0) - (2.0 * math.asin(math.sqrt(((1.0 - x) / 2.0))))
function code(x) return Float64(Float64(pi / 2.0) - Float64(2.0 * asin(sqrt(Float64(Float64(1.0 - x) / 2.0))))) end
function tmp = code(x) tmp = (pi / 2.0) - (2.0 * asin(sqrt(((1.0 - x) / 2.0)))); end
code[x_] := N[(N[(Pi / 2.0), $MachinePrecision] - N[(2.0 * N[ArcSin[N[Sqrt[N[(N[(1.0 - x), $MachinePrecision] / 2.0), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{\pi}{2} - 2 \cdot \sin^{-1} \left(\sqrt{\frac{1 - x}{2}}\right)
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 6 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x) :precision binary64 (- (/ PI 2.0) (* 2.0 (asin (sqrt (/ (- 1.0 x) 2.0))))))
double code(double x) {
return (((double) M_PI) / 2.0) - (2.0 * asin(sqrt(((1.0 - x) / 2.0))));
}
public static double code(double x) {
return (Math.PI / 2.0) - (2.0 * Math.asin(Math.sqrt(((1.0 - x) / 2.0))));
}
def code(x): return (math.pi / 2.0) - (2.0 * math.asin(math.sqrt(((1.0 - x) / 2.0))))
function code(x) return Float64(Float64(pi / 2.0) - Float64(2.0 * asin(sqrt(Float64(Float64(1.0 - x) / 2.0))))) end
function tmp = code(x) tmp = (pi / 2.0) - (2.0 * asin(sqrt(((1.0 - x) / 2.0)))); end
code[x_] := N[(N[(Pi / 2.0), $MachinePrecision] - N[(2.0 * N[ArcSin[N[Sqrt[N[(N[(1.0 - x), $MachinePrecision] / 2.0), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{\pi}{2} - 2 \cdot \sin^{-1} \left(\sqrt{\frac{1 - x}{2}}\right)
\end{array}
(FPCore (x)
:precision binary64
(let* ((t_0 (- (/ PI 2.0) PI))
(t_1 (* t_0 t_0))
(t_2 (acos (pow (+ 0.5 (/ x -2.0)) 0.5)))
(t_3 (* 2.0 t_2))
(t_4 (- t_3 PI))
(t_5 (* (- 0.0 2.0) t_2))
(t_6 (pow t_5 2.0)))
(/
(- t_1 t_6)
(/
(- (* t_1 t_1) (pow t_5 4.0))
(*
(/
(+ (/ (* PI (* PI PI)) 8.0) (pow t_4 3.0))
(+ (/ (* PI PI) 4.0) (+ (pow t_4 2.0) (* (/ PI 2.0) (- PI t_3)))))
(+ t_1 t_6))))))
double code(double x) {
double t_0 = (((double) M_PI) / 2.0) - ((double) M_PI);
double t_1 = t_0 * t_0;
double t_2 = acos(pow((0.5 + (x / -2.0)), 0.5));
double t_3 = 2.0 * t_2;
double t_4 = t_3 - ((double) M_PI);
double t_5 = (0.0 - 2.0) * t_2;
double t_6 = pow(t_5, 2.0);
return (t_1 - t_6) / (((t_1 * t_1) - pow(t_5, 4.0)) / (((((((double) M_PI) * (((double) M_PI) * ((double) M_PI))) / 8.0) + pow(t_4, 3.0)) / (((((double) M_PI) * ((double) M_PI)) / 4.0) + (pow(t_4, 2.0) + ((((double) M_PI) / 2.0) * (((double) M_PI) - t_3))))) * (t_1 + t_6)));
}
public static double code(double x) {
double t_0 = (Math.PI / 2.0) - Math.PI;
double t_1 = t_0 * t_0;
double t_2 = Math.acos(Math.pow((0.5 + (x / -2.0)), 0.5));
double t_3 = 2.0 * t_2;
double t_4 = t_3 - Math.PI;
double t_5 = (0.0 - 2.0) * t_2;
double t_6 = Math.pow(t_5, 2.0);
return (t_1 - t_6) / (((t_1 * t_1) - Math.pow(t_5, 4.0)) / (((((Math.PI * (Math.PI * Math.PI)) / 8.0) + Math.pow(t_4, 3.0)) / (((Math.PI * Math.PI) / 4.0) + (Math.pow(t_4, 2.0) + ((Math.PI / 2.0) * (Math.PI - t_3))))) * (t_1 + t_6)));
}
def code(x): t_0 = (math.pi / 2.0) - math.pi t_1 = t_0 * t_0 t_2 = math.acos(math.pow((0.5 + (x / -2.0)), 0.5)) t_3 = 2.0 * t_2 t_4 = t_3 - math.pi t_5 = (0.0 - 2.0) * t_2 t_6 = math.pow(t_5, 2.0) return (t_1 - t_6) / (((t_1 * t_1) - math.pow(t_5, 4.0)) / (((((math.pi * (math.pi * math.pi)) / 8.0) + math.pow(t_4, 3.0)) / (((math.pi * math.pi) / 4.0) + (math.pow(t_4, 2.0) + ((math.pi / 2.0) * (math.pi - t_3))))) * (t_1 + t_6)))
function code(x) t_0 = Float64(Float64(pi / 2.0) - pi) t_1 = Float64(t_0 * t_0) t_2 = acos((Float64(0.5 + Float64(x / -2.0)) ^ 0.5)) t_3 = Float64(2.0 * t_2) t_4 = Float64(t_3 - pi) t_5 = Float64(Float64(0.0 - 2.0) * t_2) t_6 = t_5 ^ 2.0 return Float64(Float64(t_1 - t_6) / Float64(Float64(Float64(t_1 * t_1) - (t_5 ^ 4.0)) / Float64(Float64(Float64(Float64(Float64(pi * Float64(pi * pi)) / 8.0) + (t_4 ^ 3.0)) / Float64(Float64(Float64(pi * pi) / 4.0) + Float64((t_4 ^ 2.0) + Float64(Float64(pi / 2.0) * Float64(pi - t_3))))) * Float64(t_1 + t_6)))) end
function tmp = code(x) t_0 = (pi / 2.0) - pi; t_1 = t_0 * t_0; t_2 = acos(((0.5 + (x / -2.0)) ^ 0.5)); t_3 = 2.0 * t_2; t_4 = t_3 - pi; t_5 = (0.0 - 2.0) * t_2; t_6 = t_5 ^ 2.0; tmp = (t_1 - t_6) / (((t_1 * t_1) - (t_5 ^ 4.0)) / (((((pi * (pi * pi)) / 8.0) + (t_4 ^ 3.0)) / (((pi * pi) / 4.0) + ((t_4 ^ 2.0) + ((pi / 2.0) * (pi - t_3))))) * (t_1 + t_6))); end
code[x_] := Block[{t$95$0 = N[(N[(Pi / 2.0), $MachinePrecision] - Pi), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 * t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[ArcCos[N[Power[N[(0.5 + N[(x / -2.0), $MachinePrecision]), $MachinePrecision], 0.5], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$3 = N[(2.0 * t$95$2), $MachinePrecision]}, Block[{t$95$4 = N[(t$95$3 - Pi), $MachinePrecision]}, Block[{t$95$5 = N[(N[(0.0 - 2.0), $MachinePrecision] * t$95$2), $MachinePrecision]}, Block[{t$95$6 = N[Power[t$95$5, 2.0], $MachinePrecision]}, N[(N[(t$95$1 - t$95$6), $MachinePrecision] / N[(N[(N[(t$95$1 * t$95$1), $MachinePrecision] - N[Power[t$95$5, 4.0], $MachinePrecision]), $MachinePrecision] / N[(N[(N[(N[(N[(Pi * N[(Pi * Pi), $MachinePrecision]), $MachinePrecision] / 8.0), $MachinePrecision] + N[Power[t$95$4, 3.0], $MachinePrecision]), $MachinePrecision] / N[(N[(N[(Pi * Pi), $MachinePrecision] / 4.0), $MachinePrecision] + N[(N[Power[t$95$4, 2.0], $MachinePrecision] + N[(N[(Pi / 2.0), $MachinePrecision] * N[(Pi - t$95$3), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(t$95$1 + t$95$6), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\pi}{2} - \pi\\
t_1 := t\_0 \cdot t\_0\\
t_2 := \cos^{-1} \left({\left(0.5 + \frac{x}{-2}\right)}^{0.5}\right)\\
t_3 := 2 \cdot t\_2\\
t_4 := t\_3 - \pi\\
t_5 := \left(0 - 2\right) \cdot t\_2\\
t_6 := {t\_5}^{2}\\
\frac{t\_1 - t\_6}{\frac{t\_1 \cdot t\_1 - {t\_5}^{4}}{\frac{\frac{\pi \cdot \left(\pi \cdot \pi\right)}{8} + {t\_4}^{3}}{\frac{\pi \cdot \pi}{4} + \left({t\_4}^{2} + \frac{\pi}{2} \cdot \left(\pi - t\_3\right)\right)} \cdot \left(t\_1 + t\_6\right)}}
\end{array}
\end{array}
Initial program 7.8%
asin-acosN/A
sub-negN/A
distribute-rgt-inN/A
div-invN/A
metadata-evalN/A
associate-*l*N/A
metadata-evalN/A
*-rgt-identityN/A
+-lowering-+.f64N/A
PI-lowering-PI.f64N/A
*-lowering-*.f64N/A
Applied egg-rr9.3%
associate--r+N/A
flip--N/A
/-lowering-/.f64N/A
Applied egg-rr9.3%
Applied egg-rr9.3%
Applied egg-rr9.4%
Final simplification9.4%
(FPCore (x)
:precision binary64
(let* ((t_0 (- (/ PI 2.0) PI))
(t_1 (* t_0 t_0))
(t_2 (acos (pow (+ 0.5 (/ x -2.0)) 0.5)))
(t_3 (* (- 0.0 2.0) t_2))
(t_4 (pow t_3 2.0)))
(/
(- t_1 t_4)
(/
(- (* t_1 t_1) (pow t_3 4.0))
(* (+ t_1 t_4) (/ -1.0 (/ -1.0 (+ t_0 (* 2.0 t_2)))))))))
double code(double x) {
double t_0 = (((double) M_PI) / 2.0) - ((double) M_PI);
double t_1 = t_0 * t_0;
double t_2 = acos(pow((0.5 + (x / -2.0)), 0.5));
double t_3 = (0.0 - 2.0) * t_2;
double t_4 = pow(t_3, 2.0);
return (t_1 - t_4) / (((t_1 * t_1) - pow(t_3, 4.0)) / ((t_1 + t_4) * (-1.0 / (-1.0 / (t_0 + (2.0 * t_2))))));
}
public static double code(double x) {
double t_0 = (Math.PI / 2.0) - Math.PI;
double t_1 = t_0 * t_0;
double t_2 = Math.acos(Math.pow((0.5 + (x / -2.0)), 0.5));
double t_3 = (0.0 - 2.0) * t_2;
double t_4 = Math.pow(t_3, 2.0);
return (t_1 - t_4) / (((t_1 * t_1) - Math.pow(t_3, 4.0)) / ((t_1 + t_4) * (-1.0 / (-1.0 / (t_0 + (2.0 * t_2))))));
}
def code(x): t_0 = (math.pi / 2.0) - math.pi t_1 = t_0 * t_0 t_2 = math.acos(math.pow((0.5 + (x / -2.0)), 0.5)) t_3 = (0.0 - 2.0) * t_2 t_4 = math.pow(t_3, 2.0) return (t_1 - t_4) / (((t_1 * t_1) - math.pow(t_3, 4.0)) / ((t_1 + t_4) * (-1.0 / (-1.0 / (t_0 + (2.0 * t_2))))))
function code(x) t_0 = Float64(Float64(pi / 2.0) - pi) t_1 = Float64(t_0 * t_0) t_2 = acos((Float64(0.5 + Float64(x / -2.0)) ^ 0.5)) t_3 = Float64(Float64(0.0 - 2.0) * t_2) t_4 = t_3 ^ 2.0 return Float64(Float64(t_1 - t_4) / Float64(Float64(Float64(t_1 * t_1) - (t_3 ^ 4.0)) / Float64(Float64(t_1 + t_4) * Float64(-1.0 / Float64(-1.0 / Float64(t_0 + Float64(2.0 * t_2))))))) end
function tmp = code(x) t_0 = (pi / 2.0) - pi; t_1 = t_0 * t_0; t_2 = acos(((0.5 + (x / -2.0)) ^ 0.5)); t_3 = (0.0 - 2.0) * t_2; t_4 = t_3 ^ 2.0; tmp = (t_1 - t_4) / (((t_1 * t_1) - (t_3 ^ 4.0)) / ((t_1 + t_4) * (-1.0 / (-1.0 / (t_0 + (2.0 * t_2)))))); end
code[x_] := Block[{t$95$0 = N[(N[(Pi / 2.0), $MachinePrecision] - Pi), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 * t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[ArcCos[N[Power[N[(0.5 + N[(x / -2.0), $MachinePrecision]), $MachinePrecision], 0.5], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$3 = N[(N[(0.0 - 2.0), $MachinePrecision] * t$95$2), $MachinePrecision]}, Block[{t$95$4 = N[Power[t$95$3, 2.0], $MachinePrecision]}, N[(N[(t$95$1 - t$95$4), $MachinePrecision] / N[(N[(N[(t$95$1 * t$95$1), $MachinePrecision] - N[Power[t$95$3, 4.0], $MachinePrecision]), $MachinePrecision] / N[(N[(t$95$1 + t$95$4), $MachinePrecision] * N[(-1.0 / N[(-1.0 / N[(t$95$0 + N[(2.0 * t$95$2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\pi}{2} - \pi\\
t_1 := t\_0 \cdot t\_0\\
t_2 := \cos^{-1} \left({\left(0.5 + \frac{x}{-2}\right)}^{0.5}\right)\\
t_3 := \left(0 - 2\right) \cdot t\_2\\
t_4 := {t\_3}^{2}\\
\frac{t\_1 - t\_4}{\frac{t\_1 \cdot t\_1 - {t\_3}^{4}}{\left(t\_1 + t\_4\right) \cdot \frac{-1}{\frac{-1}{t\_0 + 2 \cdot t\_2}}}}
\end{array}
\end{array}
Initial program 7.8%
asin-acosN/A
sub-negN/A
distribute-rgt-inN/A
div-invN/A
metadata-evalN/A
associate-*l*N/A
metadata-evalN/A
*-rgt-identityN/A
+-lowering-+.f64N/A
PI-lowering-PI.f64N/A
*-lowering-*.f64N/A
Applied egg-rr9.3%
associate--r+N/A
flip--N/A
/-lowering-/.f64N/A
Applied egg-rr9.3%
Applied egg-rr9.3%
Applied egg-rr9.3%
Final simplification9.3%
(FPCore (x)
:precision binary64
(let* ((t_0 (- (/ PI 2.0) PI))
(t_1 (* t_0 t_0))
(t_2 (acos (pow (+ 0.5 (/ x -2.0)) 0.5)))
(t_3 (* (- 0.0 2.0) t_2)))
(/
(+ (* PI (* PI 0.25)) (* (pow (acos (sqrt (+ 0.5 (* x -0.5)))) 2.0) -4.0))
(/
(- (* t_1 t_1) (pow t_3 4.0))
(* (+ t_1 (pow t_3 2.0)) (+ t_0 (* 2.0 t_2)))))))
double code(double x) {
double t_0 = (((double) M_PI) / 2.0) - ((double) M_PI);
double t_1 = t_0 * t_0;
double t_2 = acos(pow((0.5 + (x / -2.0)), 0.5));
double t_3 = (0.0 - 2.0) * t_2;
return ((((double) M_PI) * (((double) M_PI) * 0.25)) + (pow(acos(sqrt((0.5 + (x * -0.5)))), 2.0) * -4.0)) / (((t_1 * t_1) - pow(t_3, 4.0)) / ((t_1 + pow(t_3, 2.0)) * (t_0 + (2.0 * t_2))));
}
public static double code(double x) {
double t_0 = (Math.PI / 2.0) - Math.PI;
double t_1 = t_0 * t_0;
double t_2 = Math.acos(Math.pow((0.5 + (x / -2.0)), 0.5));
double t_3 = (0.0 - 2.0) * t_2;
return ((Math.PI * (Math.PI * 0.25)) + (Math.pow(Math.acos(Math.sqrt((0.5 + (x * -0.5)))), 2.0) * -4.0)) / (((t_1 * t_1) - Math.pow(t_3, 4.0)) / ((t_1 + Math.pow(t_3, 2.0)) * (t_0 + (2.0 * t_2))));
}
def code(x): t_0 = (math.pi / 2.0) - math.pi t_1 = t_0 * t_0 t_2 = math.acos(math.pow((0.5 + (x / -2.0)), 0.5)) t_3 = (0.0 - 2.0) * t_2 return ((math.pi * (math.pi * 0.25)) + (math.pow(math.acos(math.sqrt((0.5 + (x * -0.5)))), 2.0) * -4.0)) / (((t_1 * t_1) - math.pow(t_3, 4.0)) / ((t_1 + math.pow(t_3, 2.0)) * (t_0 + (2.0 * t_2))))
function code(x) t_0 = Float64(Float64(pi / 2.0) - pi) t_1 = Float64(t_0 * t_0) t_2 = acos((Float64(0.5 + Float64(x / -2.0)) ^ 0.5)) t_3 = Float64(Float64(0.0 - 2.0) * t_2) return Float64(Float64(Float64(pi * Float64(pi * 0.25)) + Float64((acos(sqrt(Float64(0.5 + Float64(x * -0.5)))) ^ 2.0) * -4.0)) / Float64(Float64(Float64(t_1 * t_1) - (t_3 ^ 4.0)) / Float64(Float64(t_1 + (t_3 ^ 2.0)) * Float64(t_0 + Float64(2.0 * t_2))))) end
function tmp = code(x) t_0 = (pi / 2.0) - pi; t_1 = t_0 * t_0; t_2 = acos(((0.5 + (x / -2.0)) ^ 0.5)); t_3 = (0.0 - 2.0) * t_2; tmp = ((pi * (pi * 0.25)) + ((acos(sqrt((0.5 + (x * -0.5)))) ^ 2.0) * -4.0)) / (((t_1 * t_1) - (t_3 ^ 4.0)) / ((t_1 + (t_3 ^ 2.0)) * (t_0 + (2.0 * t_2)))); end
code[x_] := Block[{t$95$0 = N[(N[(Pi / 2.0), $MachinePrecision] - Pi), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 * t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[ArcCos[N[Power[N[(0.5 + N[(x / -2.0), $MachinePrecision]), $MachinePrecision], 0.5], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$3 = N[(N[(0.0 - 2.0), $MachinePrecision] * t$95$2), $MachinePrecision]}, N[(N[(N[(Pi * N[(Pi * 0.25), $MachinePrecision]), $MachinePrecision] + N[(N[Power[N[ArcCos[N[Sqrt[N[(0.5 + N[(x * -0.5), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision], 2.0], $MachinePrecision] * -4.0), $MachinePrecision]), $MachinePrecision] / N[(N[(N[(t$95$1 * t$95$1), $MachinePrecision] - N[Power[t$95$3, 4.0], $MachinePrecision]), $MachinePrecision] / N[(N[(t$95$1 + N[Power[t$95$3, 2.0], $MachinePrecision]), $MachinePrecision] * N[(t$95$0 + N[(2.0 * t$95$2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\pi}{2} - \pi\\
t_1 := t\_0 \cdot t\_0\\
t_2 := \cos^{-1} \left({\left(0.5 + \frac{x}{-2}\right)}^{0.5}\right)\\
t_3 := \left(0 - 2\right) \cdot t\_2\\
\frac{\pi \cdot \left(\pi \cdot 0.25\right) + {\cos^{-1} \left(\sqrt{0.5 + x \cdot -0.5}\right)}^{2} \cdot -4}{\frac{t\_1 \cdot t\_1 - {t\_3}^{4}}{\left(t\_1 + {t\_3}^{2}\right) \cdot \left(t\_0 + 2 \cdot t\_2\right)}}
\end{array}
\end{array}
Initial program 7.8%
asin-acosN/A
sub-negN/A
distribute-rgt-inN/A
div-invN/A
metadata-evalN/A
associate-*l*N/A
metadata-evalN/A
*-rgt-identityN/A
+-lowering-+.f64N/A
PI-lowering-PI.f64N/A
*-lowering-*.f64N/A
Applied egg-rr9.3%
associate--r+N/A
flip--N/A
/-lowering-/.f64N/A
Applied egg-rr9.3%
Applied egg-rr9.3%
Taylor expanded in x around 0
cancel-sign-sub-invN/A
metadata-evalN/A
cancel-sign-sub-invN/A
distribute-lft-neg-inN/A
+-lowering-+.f64N/A
Simplified9.3%
Final simplification9.3%
(FPCore (x)
:precision binary64
(let* ((t_0 (acos (sqrt (+ 0.5 (* x -0.5))))))
(/
(+ (* PI (* PI 0.25)) (* (pow t_0 2.0) -4.0))
(+ (* PI -0.5) (* -2.0 t_0)))))
double code(double x) {
double t_0 = acos(sqrt((0.5 + (x * -0.5))));
return ((((double) M_PI) * (((double) M_PI) * 0.25)) + (pow(t_0, 2.0) * -4.0)) / ((((double) M_PI) * -0.5) + (-2.0 * t_0));
}
public static double code(double x) {
double t_0 = Math.acos(Math.sqrt((0.5 + (x * -0.5))));
return ((Math.PI * (Math.PI * 0.25)) + (Math.pow(t_0, 2.0) * -4.0)) / ((Math.PI * -0.5) + (-2.0 * t_0));
}
def code(x): t_0 = math.acos(math.sqrt((0.5 + (x * -0.5)))) return ((math.pi * (math.pi * 0.25)) + (math.pow(t_0, 2.0) * -4.0)) / ((math.pi * -0.5) + (-2.0 * t_0))
function code(x) t_0 = acos(sqrt(Float64(0.5 + Float64(x * -0.5)))) return Float64(Float64(Float64(pi * Float64(pi * 0.25)) + Float64((t_0 ^ 2.0) * -4.0)) / Float64(Float64(pi * -0.5) + Float64(-2.0 * t_0))) end
function tmp = code(x) t_0 = acos(sqrt((0.5 + (x * -0.5)))); tmp = ((pi * (pi * 0.25)) + ((t_0 ^ 2.0) * -4.0)) / ((pi * -0.5) + (-2.0 * t_0)); end
code[x_] := Block[{t$95$0 = N[ArcCos[N[Sqrt[N[(0.5 + N[(x * -0.5), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]}, N[(N[(N[(Pi * N[(Pi * 0.25), $MachinePrecision]), $MachinePrecision] + N[(N[Power[t$95$0, 2.0], $MachinePrecision] * -4.0), $MachinePrecision]), $MachinePrecision] / N[(N[(Pi * -0.5), $MachinePrecision] + N[(-2.0 * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos^{-1} \left(\sqrt{0.5 + x \cdot -0.5}\right)\\
\frac{\pi \cdot \left(\pi \cdot 0.25\right) + {t\_0}^{2} \cdot -4}{\pi \cdot -0.5 + -2 \cdot t\_0}
\end{array}
\end{array}
Initial program 7.8%
asin-acosN/A
sub-negN/A
distribute-rgt-inN/A
div-invN/A
metadata-evalN/A
associate-*l*N/A
metadata-evalN/A
*-rgt-identityN/A
+-lowering-+.f64N/A
PI-lowering-PI.f64N/A
*-lowering-*.f64N/A
Applied egg-rr9.3%
associate--r+N/A
flip--N/A
/-lowering-/.f64N/A
Applied egg-rr9.3%
Taylor expanded in x around 0
Simplified9.3%
Final simplification9.3%
(FPCore (x) :precision binary64 (+ (* PI -0.5) (* 2.0 (acos (sqrt (- 0.5 (* 0.5 x)))))))
double code(double x) {
return (((double) M_PI) * -0.5) + (2.0 * acos(sqrt((0.5 - (0.5 * x)))));
}
public static double code(double x) {
return (Math.PI * -0.5) + (2.0 * Math.acos(Math.sqrt((0.5 - (0.5 * x)))));
}
def code(x): return (math.pi * -0.5) + (2.0 * math.acos(math.sqrt((0.5 - (0.5 * x)))))
function code(x) return Float64(Float64(pi * -0.5) + Float64(2.0 * acos(sqrt(Float64(0.5 - Float64(0.5 * x)))))) end
function tmp = code(x) tmp = (pi * -0.5) + (2.0 * acos(sqrt((0.5 - (0.5 * x))))); end
code[x_] := N[(N[(Pi * -0.5), $MachinePrecision] + N[(2.0 * N[ArcCos[N[Sqrt[N[(0.5 - N[(0.5 * x), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\pi \cdot -0.5 + 2 \cdot \cos^{-1} \left(\sqrt{0.5 - 0.5 \cdot x}\right)
\end{array}
Initial program 7.8%
asin-acosN/A
sub-negN/A
distribute-rgt-inN/A
div-invN/A
metadata-evalN/A
associate-*l*N/A
metadata-evalN/A
*-rgt-identityN/A
+-lowering-+.f64N/A
PI-lowering-PI.f64N/A
*-lowering-*.f64N/A
Applied egg-rr9.3%
Taylor expanded in x around 0
associate--r+N/A
metadata-evalN/A
cancel-sign-sub-invN/A
sub-negN/A
+-lowering-+.f64N/A
sub-negN/A
neg-mul-1N/A
distribute-rgt-outN/A
metadata-evalN/A
*-lowering-*.f64N/A
PI-lowering-PI.f64N/A
*-commutativeN/A
distribute-rgt-neg-inN/A
metadata-evalN/A
*-lowering-*.f64N/A
Simplified9.3%
Final simplification9.3%
(FPCore (x) :precision binary64 (+ (* PI -0.5) (* 2.0 (acos (sqrt 0.5)))))
double code(double x) {
return (((double) M_PI) * -0.5) + (2.0 * acos(sqrt(0.5)));
}
public static double code(double x) {
return (Math.PI * -0.5) + (2.0 * Math.acos(Math.sqrt(0.5)));
}
def code(x): return (math.pi * -0.5) + (2.0 * math.acos(math.sqrt(0.5)))
function code(x) return Float64(Float64(pi * -0.5) + Float64(2.0 * acos(sqrt(0.5)))) end
function tmp = code(x) tmp = (pi * -0.5) + (2.0 * acos(sqrt(0.5))); end
code[x_] := N[(N[(Pi * -0.5), $MachinePrecision] + N[(2.0 * N[ArcCos[N[Sqrt[0.5], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\pi \cdot -0.5 + 2 \cdot \cos^{-1} \left(\sqrt{0.5}\right)
\end{array}
Initial program 7.8%
asin-acosN/A
sub-negN/A
distribute-rgt-inN/A
div-invN/A
metadata-evalN/A
associate-*l*N/A
metadata-evalN/A
*-rgt-identityN/A
+-lowering-+.f64N/A
PI-lowering-PI.f64N/A
*-lowering-*.f64N/A
Applied egg-rr9.3%
Taylor expanded in x around 0
associate--r+N/A
metadata-evalN/A
cancel-sign-sub-invN/A
sub-negN/A
+-lowering-+.f64N/A
sub-negN/A
neg-mul-1N/A
distribute-rgt-outN/A
metadata-evalN/A
*-lowering-*.f64N/A
PI-lowering-PI.f64N/A
*-commutativeN/A
distribute-rgt-neg-inN/A
metadata-evalN/A
*-lowering-*.f64N/A
Simplified9.3%
Taylor expanded in x around 0
sqrt-lowering-sqrt.f645.4%
Simplified5.4%
Final simplification5.4%
(FPCore (x) :precision binary64 (asin x))
double code(double x) {
return asin(x);
}
real(8) function code(x)
real(8), intent (in) :: x
code = asin(x)
end function
public static double code(double x) {
return Math.asin(x);
}
def code(x): return math.asin(x)
function code(x) return asin(x) end
function tmp = code(x) tmp = asin(x); end
code[x_] := N[ArcSin[x], $MachinePrecision]
\begin{array}{l}
\\
\sin^{-1} x
\end{array}
herbie shell --seed 2024144
(FPCore (x)
:name "Ian Simplification"
:precision binary64
:alt
(! :herbie-platform default (asin x))
(- (/ PI 2.0) (* 2.0 (asin (sqrt (/ (- 1.0 x) 2.0))))))