@@ -25,13 +25,15 @@ Base.:+(l, r::AbstractQuantity) = iszero(dimension(r)) ? new_quantity(typeof(r),
25
25
Base.:- (l:: AbstractQuantity , r) = l + (- r)
26
26
Base.:- (l, r:: AbstractQuantity ) = l + (- r)
27
27
28
- _pow (l:: AbstractDimensions , r) = map_dimensions (Base. Fix1 (* , r), l)
29
- _pow (l:: AbstractQuantity{T} , r) where {T} = new_quantity (typeof (l), ustrip (l)^ r, _pow (dimension (l), r))
30
- _pow_as_T (l:: AbstractQuantity{T} , r) where {T} = new_quantity (typeof (l), ustrip (l)^ convert (T, r), _pow (l. dimensions, r))
31
- Base.:^ (l:: AbstractDimensions{R} , r:: Integer ) where {R} = _pow (l, r)
28
+ # We don't promote on the dimension types:
29
+ _pow (l:: AbstractDimensions{R} , r:: R ) where {R} = map_dimensions (Base. Fix1 (* , r), l)
32
30
Base.:^ (l:: AbstractDimensions{R} , r:: Number ) where {R} = _pow (l, tryrationalize (R, r))
33
- Base.:^ (l:: AbstractQuantity{T,D} , r:: Integer ) where {T,R,D<: AbstractDimensions{R} } = _pow (l, r)
34
- Base.:^ (l:: AbstractQuantity{T,D} , r:: Number ) where {T,R,D<: AbstractDimensions{R} } = _pow_as_T (l, tryrationalize (R, r))
31
+ Base.:^ (l:: AbstractQuantity{T,D} , r:: Integer ) where {T,R,D<: AbstractDimensions{R} } = new_quantity (typeof (l), ustrip (l)^ r, dimension (l)^ r)
32
+ Base.:^ (l:: AbstractQuantity{T,D} , r:: Number ) where {T,R,D<: AbstractDimensions{R} } =
33
+ let dim_pow = tryrationalize (R, r), val_pow = convert (T, dim_pow)
34
+ # Need to ensure we take the numerical power by the rationalized quantity:
35
+ return new_quantity (typeof (l), ustrip (l)^ val_pow, dimension (l)^ dim_pow)
36
+ end
35
37
36
38
Base. inv (d:: AbstractDimensions ) = map_dimensions (- , d)
37
39
Base. inv (q:: AbstractQuantity ) = new_quantity (typeof (q), inv (ustrip (q)), inv (dimension (q)))
0 commit comments