summaryrefslogtreecommitdiff
path: root/exercises/097_c_math.zig
diff options
context:
space:
mode:
authorChris Boesch <chrboesch@noreply.codeberg.org>2026-04-03 13:35:56 +0200
committerChris Boesch <chrboesch@noreply.codeberg.org>2026-04-03 13:35:56 +0200
commite0259f43a726f61da14686de802021fcdb9aacd0 (patch)
tree57359102e5e898289b91ada2d65ca742ec118c8b /exercises/097_c_math.zig
parentffde357f303e7459a12cfe4b785ae9e8ef9ebe30 (diff)
Insert space for additional async exercises
Diffstat (limited to 'exercises/097_c_math.zig')
-rw-r--r--exercises/097_c_math.zig41
1 files changed, 41 insertions, 0 deletions
diff --git a/exercises/097_c_math.zig b/exercises/097_c_math.zig
new file mode 100644
index 0000000..ec59a86
--- /dev/null
+++ b/exercises/097_c_math.zig
@@ -0,0 +1,41 @@
+//
+// Often, C functions are used where no equivalent Zig function exists
+// yet. Okay, that's getting less and less. ;-)
+//
+// Since the integration of a C function is very simple, as already
+// seen in the last exercise, it naturally offers itself to use the
+// very large variety of C functions for our own programs.
+// As an example:
+//
+// Let's say we have a given angle of 765.2 degrees. If we want to
+// normalize that, it means that we have to subtract X * 360 degrees
+// to get the correct angle.
+// How could we do that? A good method is to use the modulo function.
+// But if we write "765.2 % 360", it only works with float values
+// that are known at compile time.
+// In Zig, we would use @mod(a, b) instead.
+//
+// Let us now assume that we cannot do this in Zig, but only with
+// a C function from the standard library. In the library "math",
+// there is a function called "fmod"; the "f" stands for floating
+// and means that we can solve modulo for real numbers. With this
+// function, it should be possible to normalize our angle.
+// Let's go.
+
+const std = @import("std");
+
+const c = @cImport({
+ // What do we need here?
+ ???
+});
+
+pub fn main() !void {
+ const angle = 765.2;
+ const circle = 360;
+
+ // Here we call the C function 'fmod' to get our normalized angle.
+ const result = c.fmod(angle, circle);
+
+ // We use formatters for the desired precision and to truncate the decimal places
+ std.debug.print("The normalized angle of {d: >3.1} degrees is {d: >3.1} degrees.\n", .{ angle, result });
+}