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

Visual Studio 2022 17.4.3开启/arch:AVX时std::round是否失效?

问题分析与解答

这是Visual Studio 2022 17.4.x版本启用/arch:AVX时的已知bug,并非该编译选项的使用限制。

具体原因:

  • 17.4系列版本对float类型的std::round函数做AVX优化时,引入了回归问题——处理像-2.5f这种负半整数时,没有正确遵循C++标准中「远离零取整」的规则,错误返回了靠近零的结果(-2而非-3)。
  • double版本不受影响,是因为其对应的AVX优化逻辑没有触发这个bug。
  • 17.3.3版本无此问题,进一步说明这是新版本优化代码引入的错误。

临时解决方案:

  • 若对AVX性能无硬性要求,可临时关闭/arch:AVX(或切换为/arch:IA32),恢复std::round的正确行为。
  • 手动实现符合标准的float版round函数替代:
float my_round(float x) {
    return x >= 0.0f ? std::floor(x + 0.5f) : std::ceil(x - 0.5f);
}
  • 升级到Visual Studio 2022 17.5及以上版本,微软已在后续更新中修复了该bug。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:25:41