gpt4 book ai didi

c++ - 归一化整数到/从 float 转换

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:23:33 25 4
gpt4 key购买 nike

我需要将规范化整数值与实浮点值相互转换。例如,对于 int16_t,值 1.0 由 32767 表示,-1.0 由 -32768 表示。尽管为每种整数类型(有符号和无符号)执行此操作有点乏味,但手工编写仍然很容易。

但是,我想尽可能使用标准方法,而不是去重新发明轮子,所以我正在寻找的是标准 C 或 C++ 头文件、Boost 库或其他一些小型、可移植的东西,已执行这些转换的易于合并的来源。

最佳答案

这是一个使用 std::numeric_limits 的模板化解决方案:

#include <cstdint>
#include <limits>

template <typename T>
constexpr double normalize (T value) {
return value < 0
? -static_cast<double>(value) / std::numeric_limits<T>::min()
: static_cast<double>(value) / std::numeric_limits<T>::max()
;
}

int main () {
// Test cases evaluated at compile time.
static_assert(normalize(int16_t(32767)) == 1, "");
static_assert(normalize(int16_t(0)) == 0, "");
static_assert(normalize(int16_t(-32768)) == -1, "");
static_assert(normalize(int16_t(-16384)) == -0.5, "");
static_assert(normalize(uint16_t(65535)) == 1, "");
static_assert(normalize(uint16_t(0)) == 0, "");
}

这处理有符号和无符号整数,0 确实归一化为 0。

View Successful Compilation Result

关于c++ - 归一化整数到/从 float 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37580501/

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