authorgravatar for frmdstryr@protonmail.comfrmdstryr <frmdstryr@protonmail.com> 2022-07-11 09:40:05-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2022-07-11 16:40:05+03:00
log3e2e6c108a4306ed890b3034e2ad47c8d4caf2f7
treebba00f379417633e95a364ebe0f59a962d90b856
parent6f55b294f60385b76187dbeac3d571449466ab3b
signature Signed by PGP key 4AEE18F83AFDEB23

std.math: add `degreesToRadians` and `radiansToDegrees`


1 files changed, 28 insertions(+), 0 deletions(-)

lib/std/math.zig+28
......@@ -292,6 +292,34 @@ pub inline fn tan(value: anytype) @TypeOf(value) {
292292 return @tan(value);
293293}
294294
295// Convert an angle in radians to degrees. T must be a float type.
296pub fn radiansToDegrees(comptime T: type, angle_in_radians: T) T {
297 if (@typeInfo(T) != .Float)
298 @compileError("T must be a float type.");
299 return angle_in_radians * 180.0 / pi;
300}
301
302test "radiansToDegrees" {
303 try std.testing.expectApproxEqAbs(@as(f32, 0), radiansToDegrees(f32, 0), 1e-6);
304 try std.testing.expectApproxEqAbs(@as(f32, 90), radiansToDegrees(f32, pi / 2.0), 1e-6);
305 try std.testing.expectApproxEqAbs(@as(f32, -45), radiansToDegrees(f32, -pi / 4.0), 1e-6);
306 try std.testing.expectApproxEqAbs(@as(f32, 180), radiansToDegrees(f32, pi), 1e-6);
307 try std.testing.expectApproxEqAbs(@as(f32, 360), radiansToDegrees(f32, 2.0 * pi), 1e-6);
308}
309
310// Convert an angle in degrees to radians. T must be a float type.
311pub fn degreesToRadians(comptime T: type, angle_in_degrees: T) T {
312 if (@typeInfo(T) != .Float)
313 @compileError("T must be a float type.");
314 return angle_in_degrees * pi / 180.0;
315}
316
317test "degreesToRadians" {
318 try std.testing.expectApproxEqAbs(@as(f32, pi / 2.0), degreesToRadians(f32, 90), 1e-6);
319 try std.testing.expectApproxEqAbs(@as(f32, -3 * pi / 2.0), degreesToRadians(f32, -270), 1e-6);
320 try std.testing.expectApproxEqAbs(@as(f32, 2 * pi), degreesToRadians(f32, 360), 1e-6);
321}
322
295323/// Base-e exponential function on a floating point number.
296324/// Uses a dedicated hardware instruction when available.
297325/// This is the same as calling the builtin @exp