【问题标题】:Parameters for atan2() are incorrect in VS2005?VS2005 中 atan2() 的参数不正确?
【发布时间】:2015-04-02 08:59:14
【问题描述】:

Visual Studio 2005 提供的 math.h 标头似乎有错误。

double  __cdecl atan2(__in double _Y, __in double _X);

inline float atan2f(__in float _X, __in float _Y)
    {return ((float)atan2((double)_X, (double)_Y)); }

atan2f() 函数的参数好像颠倒了。

我不确定更高版本的 Visual Studio 是否属于这种情况。有谁知道这里的分数是多少?

【问题讨论】:

  • 好吧,关于它的一些讨论:ogre3d.org/forums/viewtopic.php?f=10&t=54415。通过比较 atan2f(x,y) 和 atan2f(y,x) 的结果来检查它是否是拼写错误或它们的顺序确实错误。那你就知道了:)

标签: c++ visual-studio-2005 atan2


【解决方案1】:

没有影响的差异不值得担心。

编译器(实际上)忽略 atan2() 的参数名称,因为它不是定义(即函数实现)。只要函数定义(实现)以第一个参数除以第二个参数的弧度计算反正切,atan2() 的实现是正确的。

避免atan2f() 定义中的错误的重要一点是,第一个和第二个参数以相同的顺序传递给atan2()。这种情况正在发生,因此(假设 atan2() 的定义是正确的)不存在功能缺陷,表达式 atan2f(a,b) 将计算 a/b 的反正切 - 这是标准要求的。

唯一的潜在缺陷是人类无法理解函数的作用。但是,一般来说,建议人们参考标准函数的文档而不是头文件来理解。这是风格上的缺陷,而不是功能上的缺陷。

【讨论】:

    猜你喜欢
    • 2011-05-04
    • 2012-02-04
    • 1970-01-01
    • 2020-03-13
    • 2021-01-11
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    相关资源
    最近更新 更多