从__m128转换为__m128i会导致错误的值
Converting from __m128 to __m128i results in wrong value
我需要将浮点向量(__m128)转换为整数向量(__m128i),我使用的是_mm_cvtps_epi32
,但我没有得到预期的值。下面是一个非常简单的例子:
__m128 test = _mm_set1_ps(4.5f);
__m128i test_i = _mm_cvtps_epi32(test);
调试器输出:
(lldb) po test
([0] = 4.5, [1] = 4.5, [2] = 4.5, [3] = 4.5)
(lldb) po test_i
([0] = 17179869188, [1] = 17179869188)
(lldb)
可以看到,得到的整数是…17179869188 ?从4.5吗?为什么只有两个值?_mm_cvtps_epi32
应将4个打包的32位浮点值转换为4个打包的32位整数。
Debugger,在这个例子中,将__m128i
值解释为两个64位整数,而不是您期望的四个32位整数。实际转换是正确的。
在您的代码中,您需要显式地指定如何解释SIMD值,例如:test_i.m128i_i32[0]
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 错误:未在此范围内声明'reverse'