| Alternative 1 | |
|---|---|
| Accuracy | 10.5% |
| Cost | 45888 |
\[\begin{array}{l}
t_0 := \sin^{-1} \left(1 - x\right)\\
\frac{\mathsf{fma}\left(-t_0, t_0, 0.25 \cdot {\pi}^{2}\right)}{t_0 + \pi \cdot 0.5}
\end{array}
\]
(FPCore (x) :precision binary64 (acos (- 1.0 x)))
(FPCore (x)
:precision binary64
(let* ((t_0 (asin (- 1.0 x))) (t_1 (fma PI 0.5 t_0)))
(fma
(/ PI (sqrt t_1))
(* 0.25 (* PI (sqrt (/ 1.0 (+ t_0 (* PI 0.5))))))
(/ (- (pow t_0 2.0)) t_1))))double code(double x) {
return acos((1.0 - x));
}
double code(double x) {
double t_0 = asin((1.0 - x));
double t_1 = fma(((double) M_PI), 0.5, t_0);
return fma((((double) M_PI) / sqrt(t_1)), (0.25 * (((double) M_PI) * sqrt((1.0 / (t_0 + (((double) M_PI) * 0.5)))))), (-pow(t_0, 2.0) / t_1));
}
function code(x) return acos(Float64(1.0 - x)) end
function code(x) t_0 = asin(Float64(1.0 - x)) t_1 = fma(pi, 0.5, t_0) return fma(Float64(pi / sqrt(t_1)), Float64(0.25 * Float64(pi * sqrt(Float64(1.0 / Float64(t_0 + Float64(pi * 0.5)))))), Float64(Float64(-(t_0 ^ 2.0)) / t_1)) end
code[x_] := N[ArcCos[N[(1.0 - x), $MachinePrecision]], $MachinePrecision]
code[x_] := Block[{t$95$0 = N[ArcSin[N[(1.0 - x), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(Pi * 0.5 + t$95$0), $MachinePrecision]}, N[(N[(Pi / N[Sqrt[t$95$1], $MachinePrecision]), $MachinePrecision] * N[(0.25 * N[(Pi * N[Sqrt[N[(1.0 / N[(t$95$0 + N[(Pi * 0.5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[((-N[Power[t$95$0, 2.0], $MachinePrecision]) / t$95$1), $MachinePrecision]), $MachinePrecision]]]
\cos^{-1} \left(1 - x\right)
\begin{array}{l}
t_0 := \sin^{-1} \left(1 - x\right)\\
t_1 := \mathsf{fma}\left(\pi, 0.5, t_0\right)\\
\mathsf{fma}\left(\frac{\pi}{\sqrt{t_1}}, 0.25 \cdot \left(\pi \cdot \sqrt{\frac{1}{t_0 + \pi \cdot 0.5}}\right), \frac{-{t_0}^{2}}{t_1}\right)
\end{array}
| Original | 6.9% |
|---|---|
| Target | 100.0% |
| Herbie | 10.5% |
Initial program 6.5%
Applied egg-rr6.5%
[Start]6.5 | \[ \cos^{-1} \left(1 - x\right)
\] |
|---|---|
acos-asin [=>]6.5 | \[ \color{blue}{\frac{\pi}{2} - \sin^{-1} \left(1 - x\right)}
\] |
flip-- [=>]6.5 | \[ \color{blue}{\frac{\frac{\pi}{2} \cdot \frac{\pi}{2} - \sin^{-1} \left(1 - x\right) \cdot \sin^{-1} \left(1 - x\right)}{\frac{\pi}{2} + \sin^{-1} \left(1 - x\right)}}
\] |
div-inv [=>]6.5 | \[ \frac{\color{blue}{\left(\pi \cdot \frac{1}{2}\right)} \cdot \frac{\pi}{2} - \sin^{-1} \left(1 - x\right) \cdot \sin^{-1} \left(1 - x\right)}{\frac{\pi}{2} + \sin^{-1} \left(1 - x\right)}
\] |
metadata-eval [=>]6.5 | \[ \frac{\left(\pi \cdot \color{blue}{0.5}\right) \cdot \frac{\pi}{2} - \sin^{-1} \left(1 - x\right) \cdot \sin^{-1} \left(1 - x\right)}{\frac{\pi}{2} + \sin^{-1} \left(1 - x\right)}
\] |
div-inv [=>]6.5 | \[ \frac{\left(\pi \cdot 0.5\right) \cdot \color{blue}{\left(\pi \cdot \frac{1}{2}\right)} - \sin^{-1} \left(1 - x\right) \cdot \sin^{-1} \left(1 - x\right)}{\frac{\pi}{2} + \sin^{-1} \left(1 - x\right)}
\] |
metadata-eval [=>]6.5 | \[ \frac{\left(\pi \cdot 0.5\right) \cdot \left(\pi \cdot \color{blue}{0.5}\right) - \sin^{-1} \left(1 - x\right) \cdot \sin^{-1} \left(1 - x\right)}{\frac{\pi}{2} + \sin^{-1} \left(1 - x\right)}
\] |
div-inv [=>]6.5 | \[ \frac{\left(\pi \cdot 0.5\right) \cdot \left(\pi \cdot 0.5\right) - \sin^{-1} \left(1 - x\right) \cdot \sin^{-1} \left(1 - x\right)}{\color{blue}{\pi \cdot \frac{1}{2}} + \sin^{-1} \left(1 - x\right)}
\] |
metadata-eval [=>]6.5 | \[ \frac{\left(\pi \cdot 0.5\right) \cdot \left(\pi \cdot 0.5\right) - \sin^{-1} \left(1 - x\right) \cdot \sin^{-1} \left(1 - x\right)}{\pi \cdot \color{blue}{0.5} + \sin^{-1} \left(1 - x\right)}
\] |
Applied egg-rr10.2%
[Start]6.5 | \[ \frac{\left(\pi \cdot 0.5\right) \cdot \left(\pi \cdot 0.5\right) - \sin^{-1} \left(1 - x\right) \cdot \sin^{-1} \left(1 - x\right)}{\pi \cdot 0.5 + \sin^{-1} \left(1 - x\right)}
\] |
|---|---|
div-sub [=>]6.5 | \[ \color{blue}{\frac{\left(\pi \cdot 0.5\right) \cdot \left(\pi \cdot 0.5\right)}{\pi \cdot 0.5 + \sin^{-1} \left(1 - x\right)} - \frac{\sin^{-1} \left(1 - x\right) \cdot \sin^{-1} \left(1 - x\right)}{\pi \cdot 0.5 + \sin^{-1} \left(1 - x\right)}}
\] |
associate-*l* [=>]6.5 | \[ \frac{\color{blue}{\pi \cdot \left(0.5 \cdot \left(\pi \cdot 0.5\right)\right)}}{\pi \cdot 0.5 + \sin^{-1} \left(1 - x\right)} - \frac{\sin^{-1} \left(1 - x\right) \cdot \sin^{-1} \left(1 - x\right)}{\pi \cdot 0.5 + \sin^{-1} \left(1 - x\right)}
\] |
add-sqr-sqrt [=>]10.2 | \[ \frac{\pi \cdot \left(0.5 \cdot \left(\pi \cdot 0.5\right)\right)}{\color{blue}{\sqrt{\pi \cdot 0.5 + \sin^{-1} \left(1 - x\right)} \cdot \sqrt{\pi \cdot 0.5 + \sin^{-1} \left(1 - x\right)}}} - \frac{\sin^{-1} \left(1 - x\right) \cdot \sin^{-1} \left(1 - x\right)}{\pi \cdot 0.5 + \sin^{-1} \left(1 - x\right)}
\] |
times-frac [=>]10.2 | \[ \color{blue}{\frac{\pi}{\sqrt{\pi \cdot 0.5 + \sin^{-1} \left(1 - x\right)}} \cdot \frac{0.5 \cdot \left(\pi \cdot 0.5\right)}{\sqrt{\pi \cdot 0.5 + \sin^{-1} \left(1 - x\right)}}} - \frac{\sin^{-1} \left(1 - x\right) \cdot \sin^{-1} \left(1 - x\right)}{\pi \cdot 0.5 + \sin^{-1} \left(1 - x\right)}
\] |
fma-neg [=>]10.2 | \[ \color{blue}{\mathsf{fma}\left(\frac{\pi}{\sqrt{\pi \cdot 0.5 + \sin^{-1} \left(1 - x\right)}}, \frac{0.5 \cdot \left(\pi \cdot 0.5\right)}{\sqrt{\pi \cdot 0.5 + \sin^{-1} \left(1 - x\right)}}, -\frac{\sin^{-1} \left(1 - x\right) \cdot \sin^{-1} \left(1 - x\right)}{\pi \cdot 0.5 + \sin^{-1} \left(1 - x\right)}\right)}
\] |
Simplified10.3%
[Start]10.2 | \[ \mathsf{fma}\left(\frac{\pi}{\sqrt{\mathsf{fma}\left(\pi, 0.5, \sin^{-1} \left(1 - x\right)\right)}}, \frac{0.25 \cdot \pi}{\sqrt{\mathsf{fma}\left(\pi, 0.5, \sin^{-1} \left(1 - x\right)\right)}}, -\frac{{\sin^{-1} \left(1 - x\right)}^{2}}{\mathsf{fma}\left(\pi, 0.5, \sin^{-1} \left(1 - x\right)\right)}\right)
\] |
|---|---|
associate-/l* [=>]10.2 | \[ \mathsf{fma}\left(\frac{\pi}{\sqrt{\mathsf{fma}\left(\pi, 0.5, \sin^{-1} \left(1 - x\right)\right)}}, \color{blue}{\frac{0.25}{\frac{\sqrt{\mathsf{fma}\left(\pi, 0.5, \sin^{-1} \left(1 - x\right)\right)}}{\pi}}}, -\frac{{\sin^{-1} \left(1 - x\right)}^{2}}{\mathsf{fma}\left(\pi, 0.5, \sin^{-1} \left(1 - x\right)\right)}\right)
\] |
associate-/r/ [=>]10.3 | \[ \mathsf{fma}\left(\frac{\pi}{\sqrt{\mathsf{fma}\left(\pi, 0.5, \sin^{-1} \left(1 - x\right)\right)}}, \color{blue}{\frac{0.25}{\sqrt{\mathsf{fma}\left(\pi, 0.5, \sin^{-1} \left(1 - x\right)\right)}} \cdot \pi}, -\frac{{\sin^{-1} \left(1 - x\right)}^{2}}{\mathsf{fma}\left(\pi, 0.5, \sin^{-1} \left(1 - x\right)\right)}\right)
\] |
distribute-neg-frac [=>]10.3 | \[ \mathsf{fma}\left(\frac{\pi}{\sqrt{\mathsf{fma}\left(\pi, 0.5, \sin^{-1} \left(1 - x\right)\right)}}, \frac{0.25}{\sqrt{\mathsf{fma}\left(\pi, 0.5, \sin^{-1} \left(1 - x\right)\right)}} \cdot \pi, \color{blue}{\frac{-{\sin^{-1} \left(1 - x\right)}^{2}}{\mathsf{fma}\left(\pi, 0.5, \sin^{-1} \left(1 - x\right)\right)}}\right)
\] |
Taylor expanded in x around 0 10.3%
Final simplification10.3%
| Alternative 1 | |
|---|---|
| Accuracy | 10.5% |
| Cost | 45888 |
| Alternative 2 | |
|---|---|
| Accuracy | 10.4% |
| Cost | 32512 |
| Alternative 3 | |
|---|---|
| Accuracy | 10.4% |
| Cost | 26048 |
| Alternative 4 | |
|---|---|
| Accuracy | 10.4% |
| Cost | 19712 |
| Alternative 5 | |
|---|---|
| Accuracy | 10.4% |
| Cost | 19712 |
| Alternative 6 | |
|---|---|
| Accuracy | 6.9% |
| Cost | 19456 |
| Alternative 7 | |
|---|---|
| Accuracy | 6.9% |
| Cost | 13184 |
| Alternative 8 | |
|---|---|
| Accuracy | 6.9% |
| Cost | 6848 |
| Alternative 9 | |
|---|---|
| Accuracy | 6.9% |
| Cost | 6592 |
herbie shell --seed 2023157
(FPCore (x)
:name "bug323 (missed optimization)"
:precision binary64
:pre (and (<= 0.0 x) (<= x 0.5))
:herbie-target
(* 2.0 (asin (sqrt (/ x 2.0))))
(acos (- 1.0 x)))