mirror of
https://github.com/azalea-rs/simdnbt.git
synced 2025-08-02 23:44:40 +00:00
fix floats being incorrectly rounded
This commit is contained in:
parent
345b368ccb
commit
d7eb3e4ed1
2 changed files with 7 additions and 6 deletions
|
@ -357,16 +357,17 @@ pub(crate) fn read_tag<'a>(
|
|||
}
|
||||
FLOAT_ID => {
|
||||
let float = data.read_f32()?;
|
||||
tapes
|
||||
.main
|
||||
.push(TapeElement::new_with_u32(TapeTagKind::Float, float as u32));
|
||||
tapes.main.push(TapeElement::new_with_u32(
|
||||
TapeTagKind::Float,
|
||||
float.to_bits(),
|
||||
));
|
||||
}
|
||||
DOUBLE_ID => {
|
||||
let double = data.read_f64()?;
|
||||
tapes
|
||||
.main
|
||||
.push(TapeElement::new_with_0(TapeTagKind::Double));
|
||||
tapes.main.push(TapeElement::new(double as u64));
|
||||
tapes.main.push(TapeElement::new(double.to_bits()));
|
||||
}
|
||||
BYTE_ARRAY_ID => {
|
||||
let byte_array_ptr = data.cur;
|
||||
|
|
|
@ -386,14 +386,14 @@ impl<'a: 'tape, 'tape> NbtTag<'a, 'tape> {
|
|||
pub fn float(&self) -> Option<f32> {
|
||||
let el = self.element();
|
||||
ensure_kind(el, TapeTagKind::Float)?;
|
||||
Some(el.u32() as f32)
|
||||
Some(f32::from_bits(el.u32()))
|
||||
}
|
||||
pub fn double(&self) -> Option<f64> {
|
||||
let el = self.element();
|
||||
ensure_kind(el, TapeTagKind::Double)?;
|
||||
// the value is in the next element because doubles are too big to fit in a single element
|
||||
let value_el = unsafe { *self.element.add(1) };
|
||||
Some(value_el.u64() as f64)
|
||||
Some(f64::from_bits(value_el.u64()))
|
||||
}
|
||||
pub fn byte_array(&self) -> Option<&'a [u8]> {
|
||||
let el = self.element();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue