C ++ exp()函数确实有些奇怪

试图在C ++中实现mySqrt函数时,我使用了exp()函数,如下所示:

int mySqrt(int x) {
    // For x = 2147395600
    cout << exp(0.5*log(x)) << "  ";     // It prints 46340
    return exp(0.5*log(x));              // But returns 46349
}

我试图用Google搜索这种行为的原因,但找不到任何东西。我什至尝试使用double,但输出仍然相同。

有什么解释吗?