You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 04:26:07