Optimized divBy to prevent type conversion

This commit is contained in:
AdrienBouvais 2026-04-21 11:23:55 +02:00
parent 19de4e1dd2
commit d9ab2f304a

View File

@ -85,14 +85,15 @@ pub fn Quantity(T: type, d: Dimensions, s: Scales) type {
return .{ .value = self_.value * rhs_.value }; return .{ .value = self_.value * rhs_.value };
} }
pub fn divBy(self: Self, rhs: anytype) Quantity( pub fn divBy(self: Self, rhs: anytype) Quantity(T, dims.sub(@TypeOf(rhs).dims), scales.min(@TypeOf(rhs).scales)) {
T,
dims.sub(@TypeOf(rhs).dims),
scales.min(@TypeOf(rhs).scales),
) {
const self_ = self.to(Quantity(T, 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))); 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 { pub fn scale(self: Self, sc: T) Self {