gpt4 book ai didi

floating-point - 如何仅使用稳定的标准库将 f16 解码为 f32?

转载 作者:行者123 更新时间:2023-11-29 07:48:34 29 4
gpt4 key购买 nike

我需要将存储的半 float (16 位)转换为标准的 32 位 float 。我目前使用下面的代码,但它依赖于 libc。我只想使用 std,它应该可以在稳定的 Rust 上工作。

#[inline]
fn decode_f16(half: u16) -> f32 {
let exp: u16 = half >> 10 & 0x1f;
let mant: u16 = half & 0x3ff;
let val: f32 = if exp == 0 {
ffi::c_ldexpf(mant as f32, -24)
} else if exp != 31 {
ffi::c_ldexpf(mant as f32 + 1024f32, exp as isize - 25)
} else if mant == 0 {
::std::f32::INFINITY
} else {
::std::f32::NAN
};
if half & 0x8000 != 0 {
-val
} else {
val
}
}

最佳答案

您可以将 ffi::c_ldexpf(x, y) 替换为 x * (2.0).powi(y)。根据 my exhaustive test,这适用于所有 u16 .

关于floating-point - 如何仅使用稳定的标准库将 f16 解码为 f32?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36008434/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com