| Alternative 1 | |
|---|---|
| Accuracy | 10.1% |
| Cost | 32576 |
\[\sqrt{{\pi}^{2} \cdot 0.5} \cdot \sqrt{0.5} - \sin^{-1} \left(1 - x\right)
\]
(FPCore (x) :precision binary64 (acos (- 1.0 x)))
(FPCore (x) :precision binary64 (let* ((t_0 (asin (- 1.0 x))) (t_1 (sqrt t_0))) (+ (acos (- 1.0 x)) (fma (- t_1) t_1 t_0))))
double code(double x) {
return acos((1.0 - x));
}
double code(double x) {
double t_0 = asin((1.0 - x));
double t_1 = sqrt(t_0);
return acos((1.0 - x)) + fma(-t_1, t_1, t_0);
}
function code(x) return acos(Float64(1.0 - x)) end
function code(x) t_0 = asin(Float64(1.0 - x)) t_1 = sqrt(t_0) return Float64(acos(Float64(1.0 - x)) + fma(Float64(-t_1), t_1, t_0)) 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[Sqrt[t$95$0], $MachinePrecision]}, N[(N[ArcCos[N[(1.0 - x), $MachinePrecision]], $MachinePrecision] + N[((-t$95$1) * t$95$1 + t$95$0), $MachinePrecision]), $MachinePrecision]]]
\cos^{-1} \left(1 - x\right)
\begin{array}{l}
t_0 := \sin^{-1} \left(1 - x\right)\\
t_1 := \sqrt{t_0}\\
\cos^{-1} \left(1 - x\right) + \mathsf{fma}\left(-t_1, t_1, t_0\right)
\end{array}
| Original | 6.7% |
|---|---|
| Target | 100.0% |
| Herbie | 10.1% |
Initial program 7.1%
Applied egg-rr7.1%
[Start]7.1 | \[ \cos^{-1} \left(1 - x\right)
\] |
|---|---|
expm1-log1p-u [=>]7.1 | \[ \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\cos^{-1} \left(1 - x\right)\right)\right)}
\] |
expm1-udef [=>]7.1 | \[ \color{blue}{e^{\mathsf{log1p}\left(\cos^{-1} \left(1 - x\right)\right)} - 1}
\] |
log1p-udef [=>]7.1 | \[ e^{\color{blue}{\log \left(1 + \cos^{-1} \left(1 - x\right)\right)}} - 1
\] |
add-exp-log [<=]7.1 | \[ \color{blue}{\left(1 + \cos^{-1} \left(1 - x\right)\right)} - 1
\] |
Applied egg-rr10.7%
[Start]7.1 | \[ \left(1 + \cos^{-1} \left(1 - x\right)\right) - 1
\] |
|---|---|
add-exp-log [=>]7.1 | \[ \color{blue}{e^{\log \left(1 + \cos^{-1} \left(1 - x\right)\right)}} - 1
\] |
log1p-udef [<=]7.1 | \[ e^{\color{blue}{\mathsf{log1p}\left(\cos^{-1} \left(1 - x\right)\right)}} - 1
\] |
expm1-udef [<=]7.1 | \[ \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\cos^{-1} \left(1 - x\right)\right)\right)}
\] |
expm1-log1p-u [<=]7.1 | \[ \color{blue}{\cos^{-1} \left(1 - x\right)}
\] |
acos-asin [=>]7.1 | \[ \color{blue}{\frac{\pi}{2} - \sin^{-1} \left(1 - x\right)}
\] |
*-un-lft-identity [=>]7.1 | \[ \color{blue}{1 \cdot \frac{\pi}{2}} - \sin^{-1} \left(1 - x\right)
\] |
add-sqr-sqrt [=>]10.7 | \[ 1 \cdot \frac{\pi}{2} - \color{blue}{\sqrt{\sin^{-1} \left(1 - x\right)} \cdot \sqrt{\sin^{-1} \left(1 - x\right)}}
\] |
prod-diff [=>]10.7 | \[ \color{blue}{\mathsf{fma}\left(1, \frac{\pi}{2}, -\sqrt{\sin^{-1} \left(1 - x\right)} \cdot \sqrt{\sin^{-1} \left(1 - x\right)}\right) + \mathsf{fma}\left(-\sqrt{\sin^{-1} \left(1 - x\right)}, \sqrt{\sin^{-1} \left(1 - x\right)}, \sqrt{\sin^{-1} \left(1 - x\right)} \cdot \sqrt{\sin^{-1} \left(1 - x\right)}\right)}
\] |
add-sqr-sqrt [<=]10.7 | \[ \mathsf{fma}\left(1, \frac{\pi}{2}, -\color{blue}{\sin^{-1} \left(1 - x\right)}\right) + \mathsf{fma}\left(-\sqrt{\sin^{-1} \left(1 - x\right)}, \sqrt{\sin^{-1} \left(1 - x\right)}, \sqrt{\sin^{-1} \left(1 - x\right)} \cdot \sqrt{\sin^{-1} \left(1 - x\right)}\right)
\] |
fma-neg [<=]10.7 | \[ \color{blue}{\left(1 \cdot \frac{\pi}{2} - \sin^{-1} \left(1 - x\right)\right)} + \mathsf{fma}\left(-\sqrt{\sin^{-1} \left(1 - x\right)}, \sqrt{\sin^{-1} \left(1 - x\right)}, \sqrt{\sin^{-1} \left(1 - x\right)} \cdot \sqrt{\sin^{-1} \left(1 - x\right)}\right)
\] |
*-un-lft-identity [<=]10.7 | \[ \left(\color{blue}{\frac{\pi}{2}} - \sin^{-1} \left(1 - x\right)\right) + \mathsf{fma}\left(-\sqrt{\sin^{-1} \left(1 - x\right)}, \sqrt{\sin^{-1} \left(1 - x\right)}, \sqrt{\sin^{-1} \left(1 - x\right)} \cdot \sqrt{\sin^{-1} \left(1 - x\right)}\right)
\] |
acos-asin [<=]10.7 | \[ \color{blue}{\cos^{-1} \left(1 - x\right)} + \mathsf{fma}\left(-\sqrt{\sin^{-1} \left(1 - x\right)}, \sqrt{\sin^{-1} \left(1 - x\right)}, \sqrt{\sin^{-1} \left(1 - x\right)} \cdot \sqrt{\sin^{-1} \left(1 - x\right)}\right)
\] |
add-sqr-sqrt [<=]10.7 | \[ \cos^{-1} \left(1 - x\right) + \mathsf{fma}\left(-\sqrt{\sin^{-1} \left(1 - x\right)}, \sqrt{\sin^{-1} \left(1 - x\right)}, \color{blue}{\sin^{-1} \left(1 - x\right)}\right)
\] |
Final simplification10.7%
| Alternative 1 | |
|---|---|
| Accuracy | 10.1% |
| Cost | 32576 |
| Alternative 2 | |
|---|---|
| Accuracy | 10.1% |
| Cost | 32384 |
| Alternative 3 | |
|---|---|
| Accuracy | 6.7% |
| Cost | 26244 |
| Alternative 4 | |
|---|---|
| Accuracy | 10.1% |
| Cost | 26048 |
| Alternative 5 | |
|---|---|
| Accuracy | 6.7% |
| Cost | 19972 |
| Alternative 6 | |
|---|---|
| Accuracy | 9.2% |
| Cost | 13316 |
| Alternative 7 | |
|---|---|
| Accuracy | 9.2% |
| Cost | 13316 |
| Alternative 8 | |
|---|---|
| Accuracy | 6.7% |
| Cost | 6592 |
herbie shell --seed 2023158
(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)))