开发者社区> 问答> 正文

C/C++ math.h中的函数传相同参数进去返回的值一定相同吗?

我希望对一些向量按其方向排序。我用下面的struct存向量

struct V { double x, y };
写下面的比较函数

inline bool operator<(const V &a, const V &b)
{

return atan2(a.y,a.x)<atan2(b.y,b.x);

}
我把它传进std::sort里,然后排序过程中越界了。具体数据较大,不便分析。

然后我把V改成下面这样,并写一个构造函数

struct V
{

double x, y, t;
V(double _x, double _y) : x(_x), y(_y), t(atan2(y,x)) {}

};
比较函数改成

inline bool operator<(const V &a, const V &b)
{

return a.t<b.t;

}
这样就没问题了。

我原来认为atan2就算计算有误差,传相同的参数进去也应该返回相同的值。上面的情况意味着不是这样吗?还是有别的什么问题?

展开
收起
a123456678 2016-03-09 16:52:36 2381 0
1 条回答
写回答
取消 提交回答
  • 在构造struct的时候 x,y成员变量初始化一下吧..代码:

    #include<cmath>
    #include<iostream>
    using namespace std;
    
    int main()
    {
        int x=-3, y=7;
        double tmp=atan2(y,x);
        cout << (tmp==atan2(y,x)) << endl;
        double tmp2=atan2(y,x);
        cout << (tmp==tmp2) << endl;
        return 0;
    }

    输出:

    0
    1

    2019-07-17 18:56:25
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载