pub struct DimensionalVariable {
pub value: f64,
pub unit: [f64; 8],
}Fields§
§value: f64§unit: [f64; 8]Implementations§
Source§impl DimensionalVariable
A struct representing a dimensional variable with a value and a unit.
impl DimensionalVariable
A struct representing a dimensional variable with a value and a unit.
Sourcepub fn new(value: f64, unit_str: &str) -> Result<Self, String>
pub fn new(value: f64, unit_str: &str) -> Result<Self, String>
Creates a new DimensionalVariable with the given value and unit.
Rules for writing the unit string:
- Use a single
/as a delimiter between the numerator and denominator. - Use
-as a delimiter between individual units - Exponents can be represented either by using
^to indicate exponent (ex.m^2) or without the delimiter (ex.m2) - Inverses can be represented either by negative exponents or in the denominator (ex.
m^-2or1/m^2)
Returns an error if the unit string is invalid or contains unknown units.
Sourcepub fn value_in(&self, unit_str: &str) -> Result<f64, String>
pub fn value_in(&self, unit_str: &str) -> Result<f64, String>
Converts the value of this DimensionalVariable to the specified unit. Returns an error if the unit string is invalid or incompatible.
pub fn check_compatibility(&self, other_unit: [f64; 8]) -> bool
Sourcepub fn is_unitless(&self) -> bool
pub fn is_unitless(&self) -> bool
Returns whether the variable is unitless (all base exponents are 0).
Sourcepub fn try_add(
&self,
other: &DimensionalVariable,
) -> Result<DimensionalVariable, String>
pub fn try_add( &self, other: &DimensionalVariable, ) -> Result<DimensionalVariable, String>
Fallible add with unit compatibility check.
Sourcepub fn try_sub(
&self,
other: &DimensionalVariable,
) -> Result<DimensionalVariable, String>
pub fn try_sub( &self, other: &DimensionalVariable, ) -> Result<DimensionalVariable, String>
Fallible subtraction with unit compatibility check.
Sourcepub fn powi(&self, exp: i32) -> DimensionalVariable
pub fn powi(&self, exp: i32) -> DimensionalVariable
Raise to integer power. Units exponents are multiplied by exp. Returns a new DimensionalVariable.
Sourcepub fn powf(&self, exp: f64) -> Result<DimensionalVariable, String>
pub fn powf(&self, exp: f64) -> Result<DimensionalVariable, String>
Raise to floating power. Returns a new DimensionalVariable.
Sourcepub fn sqrt(&self) -> Result<DimensionalVariable, String>
pub fn sqrt(&self) -> Result<DimensionalVariable, String>
Square root. Allowed only when all unit exponents are value >= 0 (no complex results). Returns a new DimensionalVariable.
Sourcepub fn asin(&self) -> Result<DimensionalVariable, String>
pub fn asin(&self) -> Result<DimensionalVariable, String>
Arcsine function. Requires unitless value in [-1, 1]. Returns angle in radians.
Sourcepub fn acos(&self) -> Result<DimensionalVariable, String>
pub fn acos(&self) -> Result<DimensionalVariable, String>
Arccosine function. Requires unitless value in [-1, 1]. Returns angle in radians.
Sourcepub fn atan(&self) -> Result<DimensionalVariable, String>
pub fn atan(&self) -> Result<DimensionalVariable, String>
Arctangent function. Requires unitless value. Returns angle in radians.
Sourcepub fn neg(&self) -> DimensionalVariable
pub fn neg(&self) -> DimensionalVariable
Negate the value, keeping the same unit.
Sourcepub fn abs(&self) -> DimensionalVariable
pub fn abs(&self) -> DimensionalVariable
Returns the absolute value, keeping the same unit.
Trait Implementations§
Source§impl Add for DimensionalVariable
impl Add for DimensionalVariable
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
+ operator.Source§impl<'a, 'b> Add<&'b DimensionalVariable> for &'a DimensionalVariable
impl<'a, 'b> Add<&'b DimensionalVariable> for &'a DimensionalVariable
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
+ operator.Source§impl<'b> Add<&'b DimensionalVariable> for DimensionalVariable
impl<'b> Add<&'b DimensionalVariable> for DimensionalVariable
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
+ operator.Source§impl<'a> Add<DimensionalVariable> for &'a DimensionalVariable
impl<'a> Add<DimensionalVariable> for &'a DimensionalVariable
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
+ operator.Source§impl AddAssign<&DimensionalVariable> for DimensionalVariable
impl AddAssign<&DimensionalVariable> for DimensionalVariable
Source§fn add_assign(&mut self, rhs: &DimensionalVariable)
fn add_assign(&mut self, rhs: &DimensionalVariable)
+= operation. Read moreSource§impl Display for DimensionalVariable
impl Display for DimensionalVariable
Source§fn fmt(&self, f: &mut Formatter<'_>) -> Result
fn fmt(&self, f: &mut Formatter<'_>) -> Result
Formats the DimensionalVariable as a string in the form “value unit”.
The unit is displayed in fraction style (e.g., “m/s^2”) with:
- Positive exponents in the numerator
- Negative exponents in the denominator (as positive values)
- Exponents of 1 are omitted
- Units with exponent 0 are omitted
- Unitless quantities show “(unitless)”
Examples:
- 9.81 m/s^2 for acceleration
- 100 kg*m^2/s^2 for energy
- 3.14 rad for angle
- 5 (unitless) for dimensionless quantities
Source§impl Div for DimensionalVariable
impl Div for DimensionalVariable
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
/ operator.Source§impl<'a> Div<&'a DimensionalVariable> for f64
impl<'a> Div<&'a DimensionalVariable> for f64
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
/ operator.Source§impl<'a, 'b> Div<&'b DimensionalVariable> for &'a DimensionalVariable
impl<'a, 'b> Div<&'b DimensionalVariable> for &'a DimensionalVariable
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
/ operator.Source§impl<'b> Div<&'b DimensionalVariable> for DimensionalVariable
impl<'b> Div<&'b DimensionalVariable> for DimensionalVariable
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
/ operator.Source§impl<'a> Div<DimensionalVariable> for &'a DimensionalVariable
impl<'a> Div<DimensionalVariable> for &'a DimensionalVariable
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
/ operator.Source§impl Div<DimensionalVariable> for f64
impl Div<DimensionalVariable> for f64
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
/ operator.Source§impl<'a> Div<f64> for &'a DimensionalVariable
impl<'a> Div<f64> for &'a DimensionalVariable
Source§impl Div<f64> for DimensionalVariable
impl Div<f64> for DimensionalVariable
Source§impl DivAssign<&DimensionalVariable> for DimensionalVariable
impl DivAssign<&DimensionalVariable> for DimensionalVariable
Source§fn div_assign(&mut self, rhs: &DimensionalVariable)
fn div_assign(&mut self, rhs: &DimensionalVariable)
/= operation. Read moreSource§impl DivAssign<f64> for DimensionalVariable
impl DivAssign<f64> for DimensionalVariable
Source§fn div_assign(&mut self, rhs: f64)
fn div_assign(&mut self, rhs: f64)
/= operation. Read moreSource§impl Mul for DimensionalVariable
impl Mul for DimensionalVariable
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
* operator.Source§impl<'a> Mul<&'a DimensionalVariable> for f64
impl<'a> Mul<&'a DimensionalVariable> for f64
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
* operator.Source§impl<'a, 'b> Mul<&'b DimensionalVariable> for &'a DimensionalVariable
impl<'a, 'b> Mul<&'b DimensionalVariable> for &'a DimensionalVariable
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
* operator.Source§impl<'b> Mul<&'b DimensionalVariable> for DimensionalVariable
impl<'b> Mul<&'b DimensionalVariable> for DimensionalVariable
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
* operator.Source§impl<'a> Mul<DimensionalVariable> for &'a DimensionalVariable
impl<'a> Mul<DimensionalVariable> for &'a DimensionalVariable
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
* operator.Source§impl Mul<DimensionalVariable> for f64
impl Mul<DimensionalVariable> for f64
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
* operator.Source§impl<'a> Mul<f64> for &'a DimensionalVariable
impl<'a> Mul<f64> for &'a DimensionalVariable
Source§impl Mul<f64> for DimensionalVariable
impl Mul<f64> for DimensionalVariable
Source§impl MulAssign<&DimensionalVariable> for DimensionalVariable
impl MulAssign<&DimensionalVariable> for DimensionalVariable
Source§fn mul_assign(&mut self, rhs: &DimensionalVariable)
fn mul_assign(&mut self, rhs: &DimensionalVariable)
*= operation. Read moreSource§impl MulAssign<f64> for DimensionalVariable
impl MulAssign<f64> for DimensionalVariable
Source§fn mul_assign(&mut self, rhs: f64)
fn mul_assign(&mut self, rhs: f64)
*= operation. Read moreSource§impl<'a> Neg for &'a DimensionalVariable
impl<'a> Neg for &'a DimensionalVariable
Source§impl Neg for DimensionalVariable
impl Neg for DimensionalVariable
Source§impl PartialEq for DimensionalVariable
impl PartialEq for DimensionalVariable
Source§impl PartialOrd for DimensionalVariable
impl PartialOrd for DimensionalVariable
Source§impl Sub for DimensionalVariable
impl Sub for DimensionalVariable
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
- operator.Source§impl<'a, 'b> Sub<&'b DimensionalVariable> for &'a DimensionalVariable
impl<'a, 'b> Sub<&'b DimensionalVariable> for &'a DimensionalVariable
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
- operator.Source§impl<'b> Sub<&'b DimensionalVariable> for DimensionalVariable
impl<'b> Sub<&'b DimensionalVariable> for DimensionalVariable
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
- operator.Source§impl<'a> Sub<DimensionalVariable> for &'a DimensionalVariable
impl<'a> Sub<DimensionalVariable> for &'a DimensionalVariable
Source§type Output = DimensionalVariable
type Output = DimensionalVariable
- operator.Source§impl SubAssign<&DimensionalVariable> for DimensionalVariable
impl SubAssign<&DimensionalVariable> for DimensionalVariable
Source§fn sub_assign(&mut self, rhs: &DimensionalVariable)
fn sub_assign(&mut self, rhs: &DimensionalVariable)
-= operation. Read more