mirror of
				https://codeberg.org/ziglings/exercises.git
				synced 2025-11-04 04:35:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			42 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Zig
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Zig
		
	
	
	
	
	
//
 | 
						|
// 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 });
 | 
						|
}
 |