
(FPCore (g h) :precision binary64 (* 2.0 (cos (+ (/ (* 2.0 (PI)) 3.0) (/ (acos (/ (- g) h)) 3.0)))))
\begin{array}{l}
\\
2 \cdot \cos \left(\frac{2 \cdot \mathsf{PI}\left(\right)}{3} + \frac{\cos^{-1} \left(\frac{-g}{h}\right)}{3}\right)
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 6 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (g h) :precision binary64 (* 2.0 (cos (+ (/ (* 2.0 (PI)) 3.0) (/ (acos (/ (- g) h)) 3.0)))))
\begin{array}{l}
\\
2 \cdot \cos \left(\frac{2 \cdot \mathsf{PI}\left(\right)}{3} + \frac{\cos^{-1} \left(\frac{-g}{h}\right)}{3}\right)
\end{array}
(FPCore (g h)
:precision binary64
(let* ((t_0 (acos (/ (- g) h))) (t_1 (/ t_0 3.0)))
(-
(* (cos t_1) (cos (* -0.6666666666666666 (PI))))
(-
(* (sin t_1) (sin (* 0.6666666666666666 (PI))))
(cos (/ (fma (PI) 2.0 t_0) 3.0))))))\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos^{-1} \left(\frac{-g}{h}\right)\\
t_1 := \frac{t\_0}{3}\\
\cos t\_1 \cdot \cos \left(-0.6666666666666666 \cdot \mathsf{PI}\left(\right)\right) - \left(\sin t\_1 \cdot \sin \left(0.6666666666666666 \cdot \mathsf{PI}\left(\right)\right) - \cos \left(\frac{\mathsf{fma}\left(\mathsf{PI}\left(\right), 2, t\_0\right)}{3}\right)\right)
\end{array}
\end{array}
Initial program 98.5%
Applied rewrites100.0%
(FPCore (g h) :precision binary64 (let* ((t_0 (cos (/ (fma (PI) 2.0 (acos (/ (- g) h))) -3.0)))) (* (pow t_0 3.0) (/ 2.0 (pow t_0 2.0)))))
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \left(\frac{\mathsf{fma}\left(\mathsf{PI}\left(\right), 2, \cos^{-1} \left(\frac{-g}{h}\right)\right)}{-3}\right)\\
{t\_0}^{3} \cdot \frac{2}{{t\_0}^{2}}
\end{array}
\end{array}
Initial program 98.5%
lift-*.f64N/A
count-2-revN/A
flip3-+N/A
lower-/.f64N/A
Applied rewrites98.5%
lift-+.f64N/A
count-2N/A
lower-*.f6498.5
Applied rewrites98.5%
lift-/.f64N/A
lift-*.f64N/A
*-commutativeN/A
lift-+.f64N/A
+-lft-identityN/A
associate-/l*N/A
lower-*.f64N/A
Applied rewrites100.0%
(FPCore (g h)
:precision binary64
(let* ((t_0 (acos (/ (- g) h))))
(*
(/
(pow (cos (fma 0.3333333333333333 t_0 (* (PI) 0.6666666666666666))) 3.0)
(fma
(cos (fma 0.6666666666666666 t_0 (* 1.3333333333333333 (PI))))
0.5
0.5))
2.0)))\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos^{-1} \left(\frac{-g}{h}\right)\\
\frac{{\cos \left(\mathsf{fma}\left(0.3333333333333333, t\_0, \mathsf{PI}\left(\right) \cdot 0.6666666666666666\right)\right)}^{3}}{\mathsf{fma}\left(\cos \left(\mathsf{fma}\left(0.6666666666666666, t\_0, 1.3333333333333333 \cdot \mathsf{PI}\left(\right)\right)\right), 0.5, 0.5\right)} \cdot 2
\end{array}
\end{array}
Initial program 98.5%
lift-*.f64N/A
count-2-revN/A
flip3-+N/A
lower-/.f64N/A
Applied rewrites98.5%
lift-+.f64N/A
count-2N/A
lower-*.f6498.5
Applied rewrites98.5%
lift-+.f64N/A
+-lft-identity98.5
lift-pow.f64N/A
unpow2N/A
lift-cos.f64N/A
lift-/.f64N/A
lift-PI.f64N/A
lift-fma.f64N/A
lift-acos.f64N/A
lift-neg.f64N/A
lift-/.f64N/A
lift-cos.f64N/A
lift-/.f64N/A
Applied rewrites97.6%
Taylor expanded in g around 0
Applied rewrites99.9%
(FPCore (g h) :precision binary64 (* (cos (/ (fma (PI) 2.0 (acos (/ (- g) h))) 3.0)) 2.0))
\begin{array}{l}
\\
\cos \left(\frac{\mathsf{fma}\left(\mathsf{PI}\left(\right), 2, \cos^{-1} \left(\frac{-g}{h}\right)\right)}{3}\right) \cdot 2
\end{array}
Initial program 98.5%
lift-*.f64N/A
*-commutativeN/A
lower-*.f6498.5
Applied rewrites98.5%
(FPCore (g h) :precision binary64 (* 2.0 (cos (fma (PI) 0.6666666666666666 (* 0.3333333333333333 (acos (/ (- g) h)))))))
\begin{array}{l}
\\
2 \cdot \cos \left(\mathsf{fma}\left(\mathsf{PI}\left(\right), 0.6666666666666666, 0.3333333333333333 \cdot \cos^{-1} \left(\frac{-g}{h}\right)\right)\right)
\end{array}
Initial program 98.5%
Taylor expanded in g around 0
mul-1-negN/A
distribute-frac-negN/A
lower-fma.f64N/A
lift-/.f64N/A
lift-neg.f64N/A
lift-acos.f64N/A
lower-*.f64N/A
lift-PI.f6498.5
Applied rewrites98.5%
lift-fma.f64N/A
+-commutativeN/A
lift-PI.f64N/A
lift-*.f64N/A
*-commutativeN/A
lift-neg.f64N/A
lift-/.f64N/A
lower-acos.f64N/A
distribute-frac-negN/A
mul-1-negN/A
lower-fma.f64N/A
lift-PI.f64N/A
mul-1-negN/A
distribute-frac-negN/A
lift-/.f64N/A
lift-neg.f64N/A
lift-acos.f64N/A
lower-*.f6498.5
Applied rewrites98.5%
(FPCore (g h) :precision binary64 (* 2.0 (cos (fma 0.3333333333333333 (acos (/ (- g) h)) (* 0.6666666666666666 (PI))))))
\begin{array}{l}
\\
2 \cdot \cos \left(\mathsf{fma}\left(0.3333333333333333, \cos^{-1} \left(\frac{-g}{h}\right), 0.6666666666666666 \cdot \mathsf{PI}\left(\right)\right)\right)
\end{array}
Initial program 98.5%
Taylor expanded in g around 0
mul-1-negN/A
distribute-frac-negN/A
lower-fma.f64N/A
lift-/.f64N/A
lift-neg.f64N/A
lift-acos.f64N/A
lower-*.f64N/A
lift-PI.f6498.5
Applied rewrites98.5%
herbie shell --seed 2025038
(FPCore (g h)
:name "2-ancestry mixing, negative discriminant"
:precision binary64
(* 2.0 (cos (+ (/ (* 2.0 (PI)) 3.0) (/ (acos (/ (- g) h)) 3.0)))))