WORKING FIXED POINT

This commit is contained in:
2024-10-31 23:21:09 -04:00
parent 5513ddf25b
commit 88e25da973
14 changed files with 670 additions and 192 deletions

View File

@@ -45,15 +45,10 @@ impl From<f32> for FixedDec {
if parts.is_empty() {
dec = 0;
}
let s = Self {
sign: POS,
Self {
sign: value.is_sign_negative(),
dec,
parts,
};
if value.is_sign_negative() {
-&s
} else {
s
}
}
}
@@ -66,16 +61,8 @@ impl From<FixedDec> for f32 {
impl From<&FixedDec> for f32 {
fn from(value: &FixedDec) -> Self {
if value.is_zero() {
return if value.sign == POS { 0.0 } else { -0.0 };
}
let mut sign = 0;
let value = if value.is_neg() {
sign = 1 << 31;
&-value
} else {
value
};
let sign = if value.is_neg() { 1 << 31 } else { 0 };
let mut skip_count = 0;
let mut iter = value.parts.iter().peekable();
@@ -85,7 +72,7 @@ impl From<&FixedDec> for f32 {
}
let Some(v) = iter.next() else {
return 0.0;
return if value.is_pos() { 0.0 } else { -0.0 };
};
let mut start = v.leading_zeros() + 1;
let exp_i = (value.dec - skip_count) * 32 - start as i32;
@@ -115,3 +102,23 @@ impl From<&FixedDec> for f32 {
f32::from_bits(res)
}
}
impl From<u32> for FixedDec {
fn from(value: u32) -> Self {
Self {
dec: 1,
sign: POS,
parts: vec![value],
}
}
}
impl From<i32> for FixedDec {
fn from(value: i32) -> Self {
Self {
dec: 1,
sign: value.is_negative(),
parts: vec![value.try_into().unwrap_or((-value) as u32)],
}
}
}