C ++编译时间结果与运行时间结果不同。错误或有效行为

Tho*_*s m 5 c++ gcc

我正在使用gcc 8.3.0并启用了-ffast-math的以下代码来进行x86交叉编译:

#include <cmath>

double diff_double(double in)
{
  auto tmp = 10 * std::log10(1. * 15e3);
  return tmp - (10 * std::log10(1. * in));
}

int main()
{
    return diff_double(15e3) == 0.;
}
Run Code Online (Sandbox Code Playgroud)

在执行时,我得到的返回值为0,因为针对“ tmp”的编译器优化结果与运行时结果不同。

这是有效的行为吗?

Godbold:https://godbolt.org/z/g2sev7

谢谢你的帮助