Optimized divBy to prevent type conversion
This commit is contained in:
parent
19de4e1dd2
commit
d9ab2f304a
13
src/main.zig
13
src/main.zig
@ -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 {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user