测试的时候数字总是异常

测试的时候数字总是错误
这是题目:Circle
实验任务
有一些圆,两个圆可能相交,外离,内含,相切,或者重合。
数据输入
第一行 N,代表有几个圆。(N <= 1000)
接下来 N 行, 每行为 x,y,r, 表示该点的坐标以及圆半径。 (-100 <= x,y <= 100)
(1 <= r <=100)(均为整数)
接下来一行为 M,表示 M 次询问。(M <= 1000)
接下来 M 行,每行为 a,b,代表分别为第几个圆。
数据输出
每次询问输出一行。
若两圆相同,输出 Same,外离为 Out,内含为 In,相交为 Intersect,相切为
Tangent。
输入示例 
5
0 0 4 
0 0 1
3 0 1
6 0 1
5 0 2
5
1 1
1 4
1 2
1 5
1 3
输出示例
Same
Out
In
Intersect
Tangent

我的代码:#include<stdio.h>
#include<math.h>
void compare(float x[],float y[],float r[],int a,int b)
{
float s1;
float s2;
s1=(double)sqrt(pow(x[a-1]-x[b-1],2)+pow(y[a-1]-y[b-1],2));
s2=fabs(r[a-1]-r[b-1]);       (在这里测试s1,s2的值总是错误的。)
if(s1=s2)
{
printf("Same\n");

}
else if(s1>s2)
{
printf("Out\n");
}
else if(s1<s2)
{
printf("Intersect\n");
}
else printf("In\n");
}


int main()
{
float x[1005],y[1005],r[1005];
int n,m;
int i,j;
int a,b;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%f %f %f",&x[i],&y[i],&r[i]);

}
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d %d",&a,&b);
compare(x,y,r,a,b);

}
return 0;

}

帮忙看一下。
------解决思路----------------------
引用:
if(s1=s2)
{
比较相等不能这样比呀
还有,double类型的相等也不是这样做的,楼主搜索一下吧,拓展一下知识面
测试的时候数字总是异常
------解决思路----------------------
void compare(float x[],float y[],float r[],int a,int b) 两个圆的关系计算
是不是有点问题: 两个圆可能相交,外离,内含,相切,或者重合
------解决思路----------------------
试试将代码中的所有float替换为double
再将
if(s1=s2)
替换为
if (fabs(s1-s2)<1E6)