使用_mm_shuffle_pi16后两次cout输出float32数据结果异常求助
MSVC下__m64 shuffle操作后cout输出异常问题
环境配置
- CPU:AMD 5900x
- 操作系统:Windows 10 最新版本
- 编译器:Visual Studio 2022 MSVC 最新版本
- 编译模式:debug-X86、release-x86 均能复现问题
测试代码
#include <intrin.h> #include <iostream> #include <xmmintrin.h> int main(int argc, char* argv[]) { union { float f[2]; __m64 m; } a = {{10.f, 200.f}}; a.m = _mm_shuffle_pi16(a.m, _MM_SHUFFLE(1, 0, 3, 2)); std::cout << a.f[0] << " " << a.f[1] << std::endl; std::cout << a.f[0] << " " << a.f[1] << std::endl; return 0; }
输出对比
预期输出
200 10 200 10
实际输出
-nan(ind) 10 200 10 // 注:两次std::cout调用之间未执行任何数学运算
已完成排查
- 验证底层二进制数据完全符合IEEE 754标准
- 检查反汇编结果未发现异常
- 相同代码在Linux Kali 6.3.0环境下,使用gcc 13.1.0和clang 14.0.6编译后,输出完全符合预期:
200 10 200 10
问题咨询
是否有人遇到过类似问题?需要提供哪些额外信息来进一步定位问题根源?
内容的提问来源于stack exchange,提问作者KSroido
相关产品推荐
相关产品推荐

