MSVC相当于GCC的-fno-finite-math-only?

时间:2016-10-21 16:17:09

标签: c++ visual-c++ ieee-754

在GCC上,我们启用-ffast-math来加速浮点计算。但是,由于我们依赖于NaN和Inf浮点值的正确行为,我们也会启用-fno-finite-math-only,以便假设值不是NaN / Inf

的优化

对于MSVC,"等同于"到-ffast-math显然是/fp:fast。但是,与GCC的-ffast-math一样,also includes假设Nan / Inf不存在的优化{{3}}。 (重要的是,看起来像std :: isnan()这样的测试并不能保证提供准确的结果。)

是否有一个MSVC C ++编译选项,它允许您利用大多数/fp:fast优化,但仍然可以处理NaN和Inf值"正确"? (或者至少,保证像std :: isnan()/ std :: isinf()这样的测试会检测NaN / Inf,如果它们恰好生成的话。)

1 个答案:

答案 0 :(得分:1)

guarantees that tests like std::isnan()/std::isinf()

与GCC不同,MSVC(CL RC 19)实际上并未在std::isnan设置上优化/fp:fast

另一个永远不会优化的替代方案是调用C99 isnan或MSVC内在_isnanf。或者针对已知的位掩码推送您自己的nan测试,该位掩码可以使用std::numeric_limits::quiet_NaN生成。

请参阅: https://godbolt.org/g/YdZJq5