@safe unittest { import std.math.trigonometry; import std.math.operations : isClose; assert(cos(0.0) == 1.0); assert(cos(1.0).isClose(0.5403023059)); assert(cos(3.0).isClose(-0.9899924966)); } @safe unittest { import std.math.trigonometry; import std.math.constants : PI; import std.stdio : writefln; void someFunc() { real x = 30.0; auto result = sin(x * (PI / 180)); // convert degrees to radians writefln("The sine of %s degrees is %s", x, result); } } @safe unittest { import std.math.trigonometry; import std.math.operations : isClose; import std.math.traits : isIdentical; import std.math.constants : PI; import std.math.algebraic : sqrt; assert(isIdentical(tan(0.0), 0.0)); assert(tan(PI).isClose(0, 0.0, 1e-10)); assert(tan(PI / 3).isClose(sqrt(3.0))); } @safe unittest { import std.math.trigonometry; import std.math.operations : isClose; import std.math.traits : isNaN; import std.math.constants : PI; assert(acos(0.0).isClose(1.570796327)); assert(acos(0.5).isClose(PI / 3)); assert(acos(PI).isNaN); } @safe unittest { import std.math.trigonometry; import std.math.operations : isClose; import std.math.traits : isIdentical, isNaN; import std.math.constants : PI; assert(isIdentical(asin(0.0), 0.0)); assert(asin(0.5).isClose(PI / 6)); assert(asin(PI).isNaN); } @safe unittest { import std.math.trigonometry; import std.math.operations : isClose; import std.math.traits : isIdentical; import std.math.constants : PI; import std.math.algebraic : sqrt; assert(isIdentical(atan(0.0), 0.0)); assert(atan(sqrt(3.0)).isClose(PI / 3)); } @safe unittest { import std.math.trigonometry; import std.math.operations : isClose; import std.math.constants : PI; import std.math.algebraic : sqrt; assert(atan2(1.0, sqrt(3.0)).isClose(PI / 6)); } @safe unittest { import std.math.trigonometry; import std.math.constants : E; import std.math.operations : isClose; assert(cosh(0.0) == 1.0); assert(cosh(1.0).isClose((E + 1.0 / E) / 2)); } @safe unittest { import std.math.trigonometry; import std.math.constants : E; import std.math.operations : isClose; import std.math.traits : isIdentical; enum sinh1 = (E - 1.0 / E) / 2; import std.meta : AliasSeq; static foreach (F; AliasSeq!(float, double, real)) { assert(isIdentical(sinh(F(0.0)), F(0.0))); assert(sinh(F(1.0)).isClose(F(sinh1))); } } @safe unittest { import std.math.trigonometry; import std.math.operations : isClose; import std.math.traits : isIdentical; assert(isIdentical(tanh(0.0), 0.0)); assert(tanh(1.0).isClose(sinh(1.0) / cosh(1.0))); } @safe @nogc nothrow unittest { import std.math.trigonometry; import std.math.traits : isIdentical, isNaN; assert(isNaN(acosh(0.9))); assert(isNaN(acosh(real.nan))); assert(isIdentical(acosh(1.0), 0.0)); assert(acosh(real.infinity) == real.infinity); assert(isNaN(acosh(0.5))); } @safe @nogc nothrow unittest { import std.math.trigonometry; import std.math.traits : isIdentical, isNaN; assert(isIdentical(asinh(0.0), 0.0)); assert(isIdentical(asinh(-0.0), -0.0)); assert(asinh(real.infinity) == real.infinity); assert(asinh(-real.infinity) == -real.infinity); assert(isNaN(asinh(real.nan))); } @safe @nogc nothrow unittest { import std.math.trigonometry; import std.math.traits : isIdentical, isNaN; assert(isIdentical(atanh(0.0), 0.0)); assert(isIdentical(atanh(-0.0),-0.0)); assert(isNaN(atanh(real.nan))); assert(isNaN(atanh(-real.infinity))); assert(atanh(0.0) == 0); }