[Cobra](http://cobra-language.com/) = <!-- language: lang-cobra --> class Trig const mod as float = 0.0174532925199433f #0.017453292519943295769236907684886127134 = tau/360 var time as System.Diagnostics.Stopwatch = System.Diagnostics.Stopwatch() var output as List<of String> = List<of String>() def main for line in File.readLines('trig.in'), .output.add(.compute(float.parse(line)) + '\n') File.writeAllLines('trig.out', .output) print .time.elapsed def compute(degrees as float) as String #for angles > 360, insert `degrees %= 360` here .time.start if degrees % 180 <> 90 rad as float = degrees * .mod two as float = rad * rad cos as float = 1 cos -= (rad *= rad) / 2 cos += (rad *= two) / 24 cos -= (rad *= two) / 720 cos += (rad *= two) / 40320 cos -= (rad *= two) / 3628800 cos += (rad *= two) / 479001600 cos -= (rad *= two) / 87178291200 cos += (rad *= two) / 20922789888000 cos -= (rad *= two) / 6402373705728000 cos += (rad *= two) / 2432902008176640000 cos -= (rad *= two) / 1124000727777607680000f cos += (rad *= two) / 620448401733239439360000f cos -= (rad *= two) / 403291461126605635584000000f cos += (rad *= two) / 304888344611713860501504000000f else, cos as float = 0 if degrees % 180, sin as float = Math.sqrt(1 - (cos * cos)) * (((degrees - 180) * -1) / Math.abs(degrees - 180)) else, sin as float = 0 tan as float = sin / cos .time.stop return sin.toString('0.000000E+0') + ' ' + cos.toString('0.000000E+0') + ' ' + tan.toString('0.000000E+0') Compile it with `cobra filename -turbo`. Although if you can install Xamarin Studio and use [this](https://github.com/ramon-rocha/MonoDevelop.CobraBinding) plugin, it'll provide times that are 2%-5% faster than even the `-turbo` flag. I'm not sure why. The output is now 100% accurate to the specified number of sigfigs, and is almost as fast as the inbuilt functions (but more accurate). **Tests:** AMD FX6300 @5.1GHz - The 360 * 10000 test used by the C answer runs in 610ms (vs 190ms) - The 4-entry test used by the Python answer runs in 4.6µs (vs 30µs) - The 1000 random angle test used by the Fortran answer runs at 180ns per angle (vs 10µs)