使用舍入从浮点数转换为 uint8_t

Posted

技术标签:

【中文标题】使用舍入从浮点数转换为 uint8_t【英文标题】:Conversion from float to uint8_t with rounding 【发布时间】:2018-03-02 12:09:14 【问题描述】:

我想将大约 850 万个 float 转换为 uint8_t。 我正在处理 4K 图像并与其他工具的结果进行比较。 我的结果在某些像素上与其他工具的结果仅相差一个单位。 EG,我的结果图像的一个像素是46,而另一个工具获得的图像的像素是47。所以我需要将我的值四舍五入并将其存储在uint8_t数组中。我是用static_cast<uint8_t>("float value") 做的,但这需要额外的 80 毫秒。我该怎么做?

【问题讨论】:

static_cast<uint8_t>("float value") 是一个截断,如果你想四舍五入(即@ 987654331@) 然后看a fast method to round a double to a 32-bit int explained 当您转换大量值时,显然这样的标量转换不是一个好的选择。使用 SIMD (x86 _mm_cvtepi32_ps) 或 GPGPU 【参考方案1】:

static_cast("float value") 是一个截断,关于这个 ***.com/q/78619/995714 ***.com/q/9344709/995714 ***.com/a/429812/995714 *** 已经有很多问题了.com/q/41144668/995714 如果您想四舍五入(即 static_cast(float_value + 0.5f)),请查看将双精度数舍入为 32 位 int 的快速方法

--phuclv

【讨论】:

以上是关于使用舍入从浮点数转换为 uint8_t的主要内容,如果未能解决你的问题,请参考以下文章

将 pandas 数据框列标签从浮点数转换为整数

C++11 自动。从浮点数转换为长整数

MySQL:无法更新 JSON 列以将值从浮点数转换为整数

在 C 中从浮点数转换为无符号字符

C# 隐式运算符 MyType(int value) 自动“支持”从浮点数转换

在 SQLite 上转换表达式结果,从浮点数到十进制数