aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/exercises/094_c_math.zig
blob: e650f6ea22fec0904748b59afd9d31a6b8b75f26 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//
// Often, C functions are used where no equivalent Zig function exists
// yet. 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 won't
// work, because the standard modulo function works only with integer
// values. In the C 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 });
}