在xcode上的atan2f精度

Mir*_*pas 3 c++ math

我有这个非常简单的代码:

#include <cstdio>
#include <cmath>

int main(int argc, const char * argv[])
{
    printf("%2.21f", atan2f(0.f, -1.f));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用Intel CPU上的下一个输出:

Visual Studio 2010: 3.141592741012573200000
GCC 4.8.1         : 3.141592741012573242188
Xcode 5           : 3.141592502593994140625
Run Code Online (Sandbox Code Playgroud)

在阅读了针对atan2f的Appple手册页后,我希望打印值接近3.14159265359,因为他们说他们将返回+pi特殊值,就像我现在使用的那样.正如您所看到的,Xcode和预期值返回的值相差很大.

这是一个知道问题吗?如果是,是否有任何解决方法可以解决这个问题?

Car*_*rum 5

单精度浮点数仅具有约7位小数精度.您的测试值为3.1415926535912.如果您想要更好的精度,请使用doublelong doubleatan2atan2l匹配.

可能你从VS和GCC获得"更好"结果的原因是编译器注意到你的函数具有常量参数并且以高于单精度的方式预先计算结果.检查生成的代码以获取证据.