
(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 9 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 (sqrt (fma x -0.5 0.5)))
(t_1 (acos t_0))
(t_2 (cbrt t_1))
(t_3 (asin (sqrt (+ 0.5 (* x -0.5)))))
(t_4 (cbrt (pow PI 3.0)))
(t_5 (fma (- t_2) (pow t_2 2.0) t_1)))
(*
(/
1.0
(+
(* (pow t_4 2.0) 0.25)
(* (* 2.0 (+ (asin t_0) (+ t_5 t_5))) (fma PI 0.5 (* 2.0 t_3)))))
(+ (* (pow t_4 3.0) 0.125) (* (pow t_3 3.0) -8.0)))))
double code(double x) {
double t_0 = sqrt(fma(x, -0.5, 0.5));
double t_1 = acos(t_0);
double t_2 = cbrt(t_1);
double t_3 = asin(sqrt((0.5 + (x * -0.5))));
double t_4 = cbrt(pow(((double) M_PI), 3.0));
double t_5 = fma(-t_2, pow(t_2, 2.0), t_1);
return (1.0 / ((pow(t_4, 2.0) * 0.25) + ((2.0 * (asin(t_0) + (t_5 + t_5))) * fma(((double) M_PI), 0.5, (2.0 * t_3))))) * ((pow(t_4, 3.0) * 0.125) + (pow(t_3, 3.0) * -8.0));
}
function code(x) t_0 = sqrt(fma(x, -0.5, 0.5)) t_1 = acos(t_0) t_2 = cbrt(t_1) t_3 = asin(sqrt(Float64(0.5 + Float64(x * -0.5)))) t_4 = cbrt((pi ^ 3.0)) t_5 = fma(Float64(-t_2), (t_2 ^ 2.0), t_1) return Float64(Float64(1.0 / Float64(Float64((t_4 ^ 2.0) * 0.25) + Float64(Float64(2.0 * Float64(asin(t_0) + Float64(t_5 + t_5))) * fma(pi, 0.5, Float64(2.0 * t_3))))) * Float64(Float64((t_4 ^ 3.0) * 0.125) + Float64((t_3 ^ 3.0) * -8.0))) end
code[x_] := Block[{t$95$0 = N[Sqrt[N[(x * -0.5 + 0.5), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[ArcCos[t$95$0], $MachinePrecision]}, Block[{t$95$2 = N[Power[t$95$1, 1/3], $MachinePrecision]}, Block[{t$95$3 = N[ArcSin[N[Sqrt[N[(0.5 + N[(x * -0.5), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$4 = N[Power[N[Power[Pi, 3.0], $MachinePrecision], 1/3], $MachinePrecision]}, Block[{t$95$5 = N[((-t$95$2) * N[Power[t$95$2, 2.0], $MachinePrecision] + t$95$1), $MachinePrecision]}, N[(N[(1.0 / N[(N[(N[Power[t$95$4, 2.0], $MachinePrecision] * 0.25), $MachinePrecision] + N[(N[(2.0 * N[(N[ArcSin[t$95$0], $MachinePrecision] + N[(t$95$5 + t$95$5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(Pi * 0.5 + N[(2.0 * t$95$3), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(N[(N[Power[t$95$4, 3.0], $MachinePrecision] * 0.125), $MachinePrecision] + N[(N[Power[t$95$3, 3.0], $MachinePrecision] * -8.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sqrt{\mathsf{fma}\left(x, -0.5, 0.5\right)}\\
t_1 := \cos^{-1} t_0\\
t_2 := \sqrt[3]{t_1}\\
t_3 := \sin^{-1} \left(\sqrt{0.5 + x \cdot -0.5}\right)\\
t_4 := \sqrt[3]{{\pi}^{3}}\\
t_5 := \mathsf{fma}\left(-t_2, {t_2}^{2}, t_1\right)\\
\frac{1}{{t_4}^{2} \cdot 0.25 + \left(2 \cdot \left(\sin^{-1} t_0 + \left(t_5 + t_5\right)\right)\right) \cdot \mathsf{fma}\left(\pi, 0.5, 2 \cdot t_3\right)} \cdot \left({t_4}^{3} \cdot 0.125 + {t_3}^{3} \cdot -8\right)
\end{array}
\end{array}
Initial program 5.4%
Applied egg-rr5.4%
rem-cbrt-cube7.0%
Applied egg-rr7.0%
rem-cbrt-cube7.0%
Applied egg-rr7.0%
asin-acos7.0%
div-inv7.0%
metadata-eval7.0%
add-cube-cbrt7.0%
prod-diff7.0%
Applied egg-rr7.0%
Final simplification7.0%
(FPCore (x)
:precision binary64
(let* ((t_0 (sqrt (fma x -0.5 0.5)))
(t_1 (acos t_0))
(t_2 (asin (sqrt (+ 0.5 (* x -0.5)))))
(t_3 (cbrt (pow PI 3.0)))
(t_4 (cbrt t_1)))
(*
(+ (* (pow t_3 3.0) 0.125) (* (pow t_2 3.0) -8.0))
(/
1.0
(+
(* (pow t_3 2.0) 0.25)
(*
(fma PI 0.5 (* 2.0 t_2))
(* 2.0 (+ (asin t_0) (fma (- t_4) (pow t_4 2.0) t_1)))))))))
double code(double x) {
double t_0 = sqrt(fma(x, -0.5, 0.5));
double t_1 = acos(t_0);
double t_2 = asin(sqrt((0.5 + (x * -0.5))));
double t_3 = cbrt(pow(((double) M_PI), 3.0));
double t_4 = cbrt(t_1);
return ((pow(t_3, 3.0) * 0.125) + (pow(t_2, 3.0) * -8.0)) * (1.0 / ((pow(t_3, 2.0) * 0.25) + (fma(((double) M_PI), 0.5, (2.0 * t_2)) * (2.0 * (asin(t_0) + fma(-t_4, pow(t_4, 2.0), t_1))))));
}
function code(x) t_0 = sqrt(fma(x, -0.5, 0.5)) t_1 = acos(t_0) t_2 = asin(sqrt(Float64(0.5 + Float64(x * -0.5)))) t_3 = cbrt((pi ^ 3.0)) t_4 = cbrt(t_1) return Float64(Float64(Float64((t_3 ^ 3.0) * 0.125) + Float64((t_2 ^ 3.0) * -8.0)) * Float64(1.0 / Float64(Float64((t_3 ^ 2.0) * 0.25) + Float64(fma(pi, 0.5, Float64(2.0 * t_2)) * Float64(2.0 * Float64(asin(t_0) + fma(Float64(-t_4), (t_4 ^ 2.0), t_1))))))) end
code[x_] := Block[{t$95$0 = N[Sqrt[N[(x * -0.5 + 0.5), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[ArcCos[t$95$0], $MachinePrecision]}, Block[{t$95$2 = N[ArcSin[N[Sqrt[N[(0.5 + N[(x * -0.5), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$3 = N[Power[N[Power[Pi, 3.0], $MachinePrecision], 1/3], $MachinePrecision]}, Block[{t$95$4 = N[Power[t$95$1, 1/3], $MachinePrecision]}, N[(N[(N[(N[Power[t$95$3, 3.0], $MachinePrecision] * 0.125), $MachinePrecision] + N[(N[Power[t$95$2, 3.0], $MachinePrecision] * -8.0), $MachinePrecision]), $MachinePrecision] * N[(1.0 / N[(N[(N[Power[t$95$3, 2.0], $MachinePrecision] * 0.25), $MachinePrecision] + N[(N[(Pi * 0.5 + N[(2.0 * t$95$2), $MachinePrecision]), $MachinePrecision] * N[(2.0 * N[(N[ArcSin[t$95$0], $MachinePrecision] + N[((-t$95$4) * N[Power[t$95$4, 2.0], $MachinePrecision] + t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sqrt{\mathsf{fma}\left(x, -0.5, 0.5\right)}\\
t_1 := \cos^{-1} t_0\\
t_2 := \sin^{-1} \left(\sqrt{0.5 + x \cdot -0.5}\right)\\
t_3 := \sqrt[3]{{\pi}^{3}}\\
t_4 := \sqrt[3]{t_1}\\
\left({t_3}^{3} \cdot 0.125 + {t_2}^{3} \cdot -8\right) \cdot \frac{1}{{t_3}^{2} \cdot 0.25 + \mathsf{fma}\left(\pi, 0.5, 2 \cdot t_2\right) \cdot \left(2 \cdot \left(\sin^{-1} t_0 + \mathsf{fma}\left(-t_4, {t_4}^{2}, t_1\right)\right)\right)}
\end{array}
\end{array}
Initial program 5.4%
Applied egg-rr5.4%
rem-cbrt-cube7.0%
Applied egg-rr7.0%
rem-cbrt-cube7.0%
Applied egg-rr7.0%
asin-acos7.0%
div-inv7.0%
metadata-eval7.0%
add-cube-cbrt7.0%
prod-diff7.0%
Applied egg-rr7.0%
Final simplification7.0%
(FPCore (x)
:precision binary64
(let* ((t_0 (cbrt (pow PI 3.0)))
(t_1 (asin (sqrt (+ 0.5 (* x -0.5)))))
(t_2 (* 2.0 t_1)))
(*
(+ (* (pow t_0 3.0) 0.125) (* (pow t_1 3.0) -8.0))
(/ 1.0 (+ (* (pow t_0 2.0) 0.25) (* t_2 (fma PI 0.5 t_2)))))))
double code(double x) {
double t_0 = cbrt(pow(((double) M_PI), 3.0));
double t_1 = asin(sqrt((0.5 + (x * -0.5))));
double t_2 = 2.0 * t_1;
return ((pow(t_0, 3.0) * 0.125) + (pow(t_1, 3.0) * -8.0)) * (1.0 / ((pow(t_0, 2.0) * 0.25) + (t_2 * fma(((double) M_PI), 0.5, t_2))));
}
function code(x) t_0 = cbrt((pi ^ 3.0)) t_1 = asin(sqrt(Float64(0.5 + Float64(x * -0.5)))) t_2 = Float64(2.0 * t_1) return Float64(Float64(Float64((t_0 ^ 3.0) * 0.125) + Float64((t_1 ^ 3.0) * -8.0)) * Float64(1.0 / Float64(Float64((t_0 ^ 2.0) * 0.25) + Float64(t_2 * fma(pi, 0.5, t_2))))) end
code[x_] := Block[{t$95$0 = N[Power[N[Power[Pi, 3.0], $MachinePrecision], 1/3], $MachinePrecision]}, Block[{t$95$1 = N[ArcSin[N[Sqrt[N[(0.5 + N[(x * -0.5), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(2.0 * t$95$1), $MachinePrecision]}, N[(N[(N[(N[Power[t$95$0, 3.0], $MachinePrecision] * 0.125), $MachinePrecision] + N[(N[Power[t$95$1, 3.0], $MachinePrecision] * -8.0), $MachinePrecision]), $MachinePrecision] * N[(1.0 / N[(N[(N[Power[t$95$0, 2.0], $MachinePrecision] * 0.25), $MachinePrecision] + N[(t$95$2 * N[(Pi * 0.5 + t$95$2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sqrt[3]{{\pi}^{3}}\\
t_1 := \sin^{-1} \left(\sqrt{0.5 + x \cdot -0.5}\right)\\
t_2 := 2 \cdot t_1\\
\left({t_0}^{3} \cdot 0.125 + {t_1}^{3} \cdot -8\right) \cdot \frac{1}{{t_0}^{2} \cdot 0.25 + t_2 \cdot \mathsf{fma}\left(\pi, 0.5, t_2\right)}
\end{array}
\end{array}
Initial program 5.4%
Applied egg-rr5.4%
rem-cbrt-cube7.0%
Applied egg-rr7.0%
rem-cbrt-cube7.0%
Applied egg-rr7.0%
Final simplification7.0%
(FPCore (x)
:precision binary64
(let* ((t_0 (* (asin (sqrt (+ 0.5 (* x -0.5)))) -2.0)))
(/
(+ (* (pow (cbrt (pow PI 3.0)) 3.0) 0.125) (pow t_0 3.0))
(+ (* 0.25 (pow PI 2.0)) (* t_0 (- t_0 (* PI 0.5)))))))
double code(double x) {
double t_0 = asin(sqrt((0.5 + (x * -0.5)))) * -2.0;
return ((pow(cbrt(pow(((double) M_PI), 3.0)), 3.0) * 0.125) + pow(t_0, 3.0)) / ((0.25 * pow(((double) M_PI), 2.0)) + (t_0 * (t_0 - (((double) M_PI) * 0.5))));
}
public static double code(double x) {
double t_0 = Math.asin(Math.sqrt((0.5 + (x * -0.5)))) * -2.0;
return ((Math.pow(Math.cbrt(Math.pow(Math.PI, 3.0)), 3.0) * 0.125) + Math.pow(t_0, 3.0)) / ((0.25 * Math.pow(Math.PI, 2.0)) + (t_0 * (t_0 - (Math.PI * 0.5))));
}
function code(x) t_0 = Float64(asin(sqrt(Float64(0.5 + Float64(x * -0.5)))) * -2.0) return Float64(Float64(Float64((cbrt((pi ^ 3.0)) ^ 3.0) * 0.125) + (t_0 ^ 3.0)) / Float64(Float64(0.25 * (pi ^ 2.0)) + Float64(t_0 * Float64(t_0 - Float64(pi * 0.5))))) end
code[x_] := Block[{t$95$0 = N[(N[ArcSin[N[Sqrt[N[(0.5 + N[(x * -0.5), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision] * -2.0), $MachinePrecision]}, N[(N[(N[(N[Power[N[Power[N[Power[Pi, 3.0], $MachinePrecision], 1/3], $MachinePrecision], 3.0], $MachinePrecision] * 0.125), $MachinePrecision] + N[Power[t$95$0, 3.0], $MachinePrecision]), $MachinePrecision] / N[(N[(0.25 * N[Power[Pi, 2.0], $MachinePrecision]), $MachinePrecision] + N[(t$95$0 * N[(t$95$0 - N[(Pi * 0.5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sin^{-1} \left(\sqrt{0.5 + x \cdot -0.5}\right) \cdot -2\\
\frac{{\left(\sqrt[3]{{\pi}^{3}}\right)}^{3} \cdot 0.125 + {t_0}^{3}}{0.25 \cdot {\pi}^{2} + t_0 \cdot \left(t_0 - \pi \cdot 0.5\right)}
\end{array}
\end{array}
Initial program 5.4%
Applied egg-rr5.4%
rem-cbrt-cube7.0%
Applied egg-rr7.0%
Final simplification7.0%
(FPCore (x) :precision binary64 (+ (* 2.0 (acos (sqrt (fma x -0.5 0.5)))) (* PI -0.5)))
double code(double x) {
return (2.0 * acos(sqrt(fma(x, -0.5, 0.5)))) + (((double) M_PI) * -0.5);
}
function code(x) return Float64(Float64(2.0 * acos(sqrt(fma(x, -0.5, 0.5)))) + Float64(pi * -0.5)) end
code[x_] := N[(N[(2.0 * N[ArcCos[N[Sqrt[N[(x * -0.5 + 0.5), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision] + N[(Pi * -0.5), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
2 \cdot \cos^{-1} \left(\sqrt{\mathsf{fma}\left(x, -0.5, 0.5\right)}\right) + \pi \cdot -0.5
\end{array}
Initial program 5.4%
asin-acos7.0%
div-inv7.0%
metadata-eval7.0%
div-sub7.0%
sub-neg7.0%
metadata-eval7.0%
div-inv7.0%
distribute-rgt-neg-in7.0%
metadata-eval7.0%
metadata-eval7.0%
Applied egg-rr7.0%
sub-neg7.0%
+-commutative7.0%
metadata-eval7.0%
div-inv7.0%
asin-acos5.4%
distribute-lft-neg-in5.4%
metadata-eval5.4%
asin-acos7.0%
sub-neg7.0%
distribute-lft-in7.0%
associate-+l+7.0%
Applied egg-rr7.0%
*-commutative7.0%
associate-+r+7.0%
+-commutative7.0%
associate-+r+7.0%
neg-mul-17.0%
associate-*r*7.0%
metadata-eval7.0%
*-commutative7.0%
+-commutative7.0%
distribute-rgt1-in7.0%
metadata-eval7.0%
*-commutative7.0%
associate-*r*7.0%
metadata-eval7.0%
Simplified7.0%
Final simplification7.0%
(FPCore (x) :precision binary64 (- (/ PI 2.0) (* 2.0 (asin (/ 1.0 (sqrt (/ 2.0 (- 1.0 x))))))))
double code(double x) {
return (((double) M_PI) / 2.0) - (2.0 * asin((1.0 / sqrt((2.0 / (1.0 - x))))));
}
public static double code(double x) {
return (Math.PI / 2.0) - (2.0 * Math.asin((1.0 / Math.sqrt((2.0 / (1.0 - x))))));
}
def code(x): return (math.pi / 2.0) - (2.0 * math.asin((1.0 / math.sqrt((2.0 / (1.0 - x))))))
function code(x) return Float64(Float64(pi / 2.0) - Float64(2.0 * asin(Float64(1.0 / sqrt(Float64(2.0 / Float64(1.0 - x))))))) end
function tmp = code(x) tmp = (pi / 2.0) - (2.0 * asin((1.0 / sqrt((2.0 / (1.0 - x)))))); end
code[x_] := N[(N[(Pi / 2.0), $MachinePrecision] - N[(2.0 * N[ArcSin[N[(1.0 / N[Sqrt[N[(2.0 / N[(1.0 - x), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{\pi}{2} - 2 \cdot \sin^{-1} \left(\frac{1}{\sqrt{\frac{2}{1 - x}}}\right)
\end{array}
Initial program 5.4%
clear-num5.4%
sqrt-div5.7%
metadata-eval5.7%
Applied egg-rr5.7%
Final simplification5.7%
(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}
Initial program 5.4%
Final simplification5.4%
(FPCore (x) :precision binary64 (- (/ PI 2.0) (* 2.0 (asin (/ 1.0 (sqrt 2.0))))))
double code(double x) {
return (((double) M_PI) / 2.0) - (2.0 * asin((1.0 / sqrt(2.0))));
}
public static double code(double x) {
return (Math.PI / 2.0) - (2.0 * Math.asin((1.0 / Math.sqrt(2.0))));
}
def code(x): return (math.pi / 2.0) - (2.0 * math.asin((1.0 / math.sqrt(2.0))))
function code(x) return Float64(Float64(pi / 2.0) - Float64(2.0 * asin(Float64(1.0 / sqrt(2.0))))) end
function tmp = code(x) tmp = (pi / 2.0) - (2.0 * asin((1.0 / sqrt(2.0)))); end
code[x_] := N[(N[(Pi / 2.0), $MachinePrecision] - N[(2.0 * N[ArcSin[N[(1.0 / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{\pi}{2} - 2 \cdot \sin^{-1} \left(\frac{1}{\sqrt{2}}\right)
\end{array}
Initial program 5.4%
clear-num5.4%
sqrt-div5.7%
metadata-eval5.7%
Applied egg-rr5.7%
Taylor expanded in x around 0 4.3%
Final simplification4.3%
(FPCore (x) :precision binary64 (- (/ PI 2.0) (* 2.0 (asin (sqrt 0.5)))))
double code(double x) {
return (((double) M_PI) / 2.0) - (2.0 * asin(sqrt(0.5)));
}
public static double code(double x) {
return (Math.PI / 2.0) - (2.0 * Math.asin(Math.sqrt(0.5)));
}
def code(x): return (math.pi / 2.0) - (2.0 * math.asin(math.sqrt(0.5)))
function code(x) return Float64(Float64(pi / 2.0) - Float64(2.0 * asin(sqrt(0.5)))) end
function tmp = code(x) tmp = (pi / 2.0) - (2.0 * asin(sqrt(0.5))); end
code[x_] := N[(N[(Pi / 2.0), $MachinePrecision] - N[(2.0 * N[ArcSin[N[Sqrt[0.5], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{\pi}{2} - 2 \cdot \sin^{-1} \left(\sqrt{0.5}\right)
\end{array}
Initial program 5.4%
Taylor expanded in x around 0 3.9%
Final simplification3.9%
(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 2023305
(FPCore (x)
:name "Ian Simplification"
:precision binary64
:herbie-target
(asin x)
(- (/ PI 2.0) (* 2.0 (asin (sqrt (/ (- 1.0 x) 2.0))))))