double code(double J, double K, double U) {
return ((double) (((double) (((double) (-2.0 * J)) * ((double) cos(((double) (K / 2.0)))))) * ((double) sqrt(((double) (1.0 + ((double) pow(((double) (U / ((double) (((double) (2.0 * J)) * ((double) cos(((double) (K / 2.0)))))))), 2.0))))))));
}
double code(double J, double K, double U) {
double VAR;
if (((J <= -1.8154118417069826e-206) || !(J <= 1.4979404704575452e-118))) {
VAR = ((double) (-2.0 * ((double) (J * ((double) (((double) cos(((double) (K / 2.0)))) * ((double) sqrt(((double) (1.0 + ((double) pow(((double) (U / ((double) (J * ((double) (2.0 * ((double) cos(((double) (K / 2.0)))))))))), 2.0))))))))))));
} else {
VAR = ((double) (-2.0 * ((double) (J * ((double) (((double) cos(((double) (K / 2.0)))) * ((double) (((double) (U / J)) * ((double) (((double) sqrt(0.25)) / ((double) cos(((double) (K * 0.5))))))))))))));
}
return VAR;
}



Bits error versus J



Bits error versus K



Bits error versus U
Results
if J < -1.81541184170698256e-206 or 1.49794047045754518e-118 < J Initial program 11.6
Simplified11.6
if -1.81541184170698256e-206 < J < 1.49794047045754518e-118Initial program 39.4
Simplified39.5
Taylor expanded around inf 47.2
Simplified47.3
Final simplification20.2
herbie shell --seed 2020191
(FPCore (J K U)
:name "Maksimov and Kolovsky, Equation (3)"
:precision binary64
(* (* (* -2.0 J) (cos (/ K 2.0))) (sqrt (+ 1.0 (pow (/ U (* (* 2.0 J) (cos (/ K 2.0)))) 2.0)))))