gpt4 book ai didi

c - 如何将float类型转换为short类型并在short类型溢出时截断float类型?

转载 作者:行者123 更新时间:2023-11-30 15:52:56 25 4
gpt4 key购买 nike

我有一个代码:

    if (Ly0 > 32767) {
buffer[index] = 32767;
} else if (Ly0 < -32768) {
buffer[index] = -32768;
} else {
buffer[index] = (short) Ly0;
}
  • buffer 是短类型。
  • Ly0 为 float 类型。

我需要将float转换为short,如果float的整数部分大于short的最大值short应该等于short的最大值,如果float的整数部分小于short的最小值short应该等于short的最小值,在其他情况下我需要将 float 转换为 Short 并仅获取 float 的整数值。

换句话说,我需要从 float 转换为 Short,并在超出 Short 范围时截断 float。

问题是这种方法不够快、不够耐用。

是否有更快、最干净的方式将浮点转换为短值。

最佳答案

使用 sse 内在函数,您可以首先转换为整数,然后执行 long int 到短 int 的饱和转换(使用 PACKSSDW )。

“可移植”方式是使用例如ORC ,这是一个用于优化内循环的运行时编译库,使用 mmx、sse、neon 和 avs;以及提供兼容的串行实现。

甚至在此之前,人们可能想检查编译器输出。例如。使用 gcc -ffast-math -O3 等,编译器通常可以生成 xmm 指令并并行化大型循环,其迭代计数在编译时已知。通过“运气==蛮力”,人们可能可以将 C 代码调整为一种编译器可以识别饱和包模式的形式。通常,它仅取决于对中间计算类型的微观管理。 (比较是有符号还是无符号,是int还是short等)

关于c - 如何将float类型转换为short类型并在short类型溢出时截断float类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14009819/

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