2 \cdot \cos \left(\frac{2 \cdot \pi}{3} + \frac{\cos^{-1} \left(\frac{-g}{h}\right)}{3}\right)2 \cdot \sqrt[3]{{\left(\sqrt[3]{{\left(\cos \left(\mathsf{fma}\left(\frac{2}{3}, \pi, \frac{\cos^{-1} \left(\frac{-g}{h}\right)}{3}\right)\right)\right)}^{2}} \cdot \sqrt[3]{\cos \left(\mathsf{fma}\left(\frac{2}{3}, \pi, \frac{\cos^{-1} \left(\frac{-g}{h}\right)}{3}\right)\right)}\right)}^{3}}double f(double g, double h) {
double r107061 = 2.0;
double r107062 = atan2(1.0, 0.0);
double r107063 = r107061 * r107062;
double r107064 = 3.0;
double r107065 = r107063 / r107064;
double r107066 = g;
double r107067 = -r107066;
double r107068 = h;
double r107069 = r107067 / r107068;
double r107070 = acos(r107069);
double r107071 = r107070 / r107064;
double r107072 = r107065 + r107071;
double r107073 = cos(r107072);
double r107074 = r107061 * r107073;
return r107074;
}
double f(double g, double h) {
double r107075 = 2.0;
double r107076 = 3.0;
double r107077 = r107075 / r107076;
double r107078 = atan2(1.0, 0.0);
double r107079 = g;
double r107080 = -r107079;
double r107081 = h;
double r107082 = r107080 / r107081;
double r107083 = acos(r107082);
double r107084 = r107083 / r107076;
double r107085 = fma(r107077, r107078, r107084);
double r107086 = cos(r107085);
double r107087 = 2.0;
double r107088 = pow(r107086, r107087);
double r107089 = cbrt(r107088);
double r107090 = cbrt(r107086);
double r107091 = r107089 * r107090;
double r107092 = 3.0;
double r107093 = pow(r107091, r107092);
double r107094 = cbrt(r107093);
double r107095 = r107075 * r107094;
return r107095;
}



Bits error versus g



Bits error versus h
Initial program 1.0
Simplified1.0
rmApplied add-cbrt-cube1.5
Simplified1.0
rmApplied add-cube-cbrt1.0
Simplified0.0
Final simplification0.0
herbie shell --seed 2019325 +o rules:numerics
(FPCore (g h)
:name "2-ancestry mixing, negative discriminant"
:precision binary64
(* 2 (cos (+ (/ (* 2 PI) 3) (/ (acos (/ (- g) h)) 3)))))