From d9ab2f304a1df6e50daa9185153df56a2eee4622 Mon Sep 17 00:00:00 2001 From: AdrienBouvais Date: Tue, 21 Apr 2026 11:23:55 +0200 Subject: [PATCH] Optimized divBy to prevent type conversion --- src/main.zig | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main.zig b/src/main.zig index 33e45ca..bd328b2 100644 --- a/src/main.zig +++ b/src/main.zig @@ -85,14 +85,15 @@ pub fn Quantity(T: type, d: Dimensions, s: Scales) type { return .{ .value = self_.value * rhs_.value }; } - pub fn divBy(self: Self, rhs: anytype) Quantity( - T, - dims.sub(@TypeOf(rhs).dims), - scales.min(@TypeOf(rhs).scales), - ) { + pub fn divBy(self: Self, rhs: anytype) Quantity(T, dims.sub(@TypeOf(rhs).dims), scales.min(@TypeOf(rhs).scales)) { const self_ = self.to(Quantity(T, dims, scales.min(@TypeOf(rhs).scales))); const rhs_ = rhs.to(Quantity(T, @TypeOf(rhs).dims, scales.min(@TypeOf(rhs).scales))); - return .{ .value = fromF64((toF64(self_.value) / toF64(rhs_.value))) }; + + if (comptime @typeInfo(T) == .int) { + return .{ .value = @divTrunc(self_.value, rhs_.value) }; + } else { + return .{ .value = self_.value / rhs_.value }; + } } pub fn scale(self: Self, sc: T) Self {