?

Average Accuracy: 6.7% → 10.1%
Time: 14.7s
Precision: binary64
Cost: 45696

?

\[0 \leq x \land x \leq 0.5\]
\[\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} \]
(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}

Error?

Target

Original6.7%
Target100.0%
Herbie10.1%
\[2 \cdot \sin^{-1} \left(\sqrt{\frac{x}{2}}\right) \]

Derivation?

  1. Initial program 7.1%

    \[\cos^{-1} \left(1 - x\right) \]
  2. Applied egg-rr7.1%

    \[\leadsto \color{blue}{\left(1 + \cos^{-1} \left(1 - x\right)\right) - 1} \]
    Step-by-step derivation

    [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 \]
  3. Applied egg-rr10.7%

    \[\leadsto \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)}, \sin^{-1} \left(1 - x\right)\right)} \]
    Step-by-step derivation

    [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) \]
  4. Final simplification10.7%

    \[\leadsto \cos^{-1} \left(1 - x\right) + \mathsf{fma}\left(-\sqrt{\sin^{-1} \left(1 - x\right)}, \sqrt{\sin^{-1} \left(1 - x\right)}, \sin^{-1} \left(1 - x\right)\right) \]

Alternatives

Alternative 1
Accuracy10.1%
Cost32576
\[\sqrt{{\pi}^{2} \cdot 0.5} \cdot \sqrt{0.5} - \sin^{-1} \left(1 - x\right) \]
Alternative 2
Accuracy10.1%
Cost32384
\[\mathsf{fma}\left({\left(\sqrt{0.5}\right)}^{2}, \pi, -\sin^{-1} \left(1 - x\right)\right) \]
Alternative 3
Accuracy6.7%
Cost26244
\[\begin{array}{l} \mathbf{if}\;1 - x \leq 1:\\ \;\;\;\;e^{\log \left(\pi \cdot 0.5 - \sin^{-1} \left(1 - x\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;1 + \sqrt{{\left(\cos^{-1} \left(1 - x\right) + -1\right)}^{2}}\\ \end{array} \]
Alternative 4
Accuracy10.1%
Cost26048
\[\pi \cdot {\left(\sqrt{0.5}\right)}^{2} - \sin^{-1} \left(1 - x\right) \]
Alternative 5
Accuracy6.7%
Cost19972
\[\begin{array}{l} \mathbf{if}\;1 - x \leq 1:\\ \;\;\;\;\pi \cdot 0.5 - \sin^{-1} \left(1 - x\right)\\ \mathbf{else}:\\ \;\;\;\;1 + \sqrt{{\left(\cos^{-1} \left(1 - x\right) + -1\right)}^{2}}\\ \end{array} \]
Alternative 6
Accuracy9.2%
Cost13316
\[\begin{array}{l} \mathbf{if}\;x \leq 5.6 \cdot 10^{-17}:\\ \;\;\;\;\sin^{-1} \left(1 - x\right) + \pi \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;\cos^{-1} \left(1 - x\right)\\ \end{array} \]
Alternative 7
Accuracy9.2%
Cost13316
\[\begin{array}{l} t_0 := \sin^{-1} \left(1 - x\right)\\ \mathbf{if}\;x \leq 5.6 \cdot 10^{-17}:\\ \;\;\;\;t_0 + \pi \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;\pi \cdot 0.5 - t_0\\ \end{array} \]
Alternative 8
Accuracy6.7%
Cost6592
\[\cos^{-1} \left(1 - x\right) \]

Error

Reproduce?

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)))