private static double Tan(double X) {
double c = X / Math.PI;
double d = c - Math.Floor(c) - 0.5;
double e = Math.Floor(X >= 0.0 ? X : -X) * 1.38462643383279E-16;
if (d >= -e & d <= e) {
return 0.0; /// ComplexInfinity
} else {
return Math.Tan(X);
}
}