Visual Studio 2022 17.4.3打破了std::round吗?



(注意:只有当编译器开关/arch:AVX设置时,我才会出现此问题。

我的gtest单元测试已经这样做了7年了

ASSERT_EQ(-3.0, std::round(-2.5f));  // (Note the 'f' suffix)

根据cpp-reference,std::round应该从0取整,对吗?然而,在当前的版本中,这个测试刚刚开始失败。我错过什么了吗?我所做的就是更新我的Visual Studio 2022到17.4.3我的同事17.3.3没有这个问题

编辑:我不知道问题是GTEST和它的宏或假设我的单元测试关于平等。我在测试

中放入了以下两行代码
std::cerr << "std::round(-2.5) = " << std::round(-2.5) << std::endl;
std::cerr << "std::round(-2.5f) = " << std::round(-2.5f) << std::endl;

它们产生以下输出。第二个是错的,不是吗?

std::round(-2.5) = -3
std::round(-2.5f) = -2

编辑#2:正如我上面提到的,只有当我设置编译器标志/arch:AVX时才会发生,如果只是创建一个控制台应用程序并且不设置如果我显式地将其设置为/arch:IA32的标志,问题就会消失。但问题就变成了:这是一个bug还是我不应该使用这个选项?

这是一个已知的错误,请参阅developercommunity上的错误报告,该报告已经在"等待发布"中。状态。

为了完整/独立,这里的最小示例是(godbolt):

int main()
{
std::cout << "MSVC version: " << _MSC_FULL_VER << 'n';
std::cout << "Round 0.5f: " << std::round(0.5f) << 'n';
std::cout << "Round 0.5: " << std::round(0.5) << 'n';
}

用AVX或AVX2编译的。正确的输出,例如使用MSVC 19.33是

MSVC version: 193331631
Round 0.5f: 1
Round 0.5: 1

而最新的MSVC 19.34输出

MSVC version: 193431931
Round 0.5f: 0
Round 0.5: 1

相关内容

  • 没有找到相关文章

最新更新