浮点型数据的精度控制问题

来源:互联网 发布:Win apache cgi 配置 编辑:程序博客网 时间:2024/04/29 01:30
      

Problem G: 说好的点呢

Time Limit: 1 Sec  Memory Limit: 16 MB
Submit: 2380  Solved: 392
[Submit][Status][Web Board]

Description

两点确定一条直线,判断一条直线与一个圆的位置关系。

Input

输入中前两行每行描述一个点的坐标(x,y),x,y均为实数。

第三行包含三个实数,即圆心坐标和圆的半径R>0。

Output

输出包含三种情况,计算误差应在1e-3(0.001)内。

“Interseetion”(相交时输出);

“Tangency”(相切时输出);

“Disjoint”(相离时输出);

以上输出不含引号。

Sample Input

1 00 10 0 1

Sample Output

Interseetion

HINT

回忆中学的几何知识,最好能自己先想到此题的几何解,实在想不到,可以查查法线方程之类的,然后用程序实现。这里要用到浮点数的精度控制。

Append Code

[Submit][Status][Web Board]







#include<stdio.h>
#include<math.h>
int main()
{
    doublexi,yi,xii,yii,x,y,k,d,m,n,r;
    scanf("%lf %lf",&xi,&yi);
    scanf("%lf %lf",&xii,&yii);
    scanf("%lf %lf %lf",&x,&y,&r);
    if(r>0)
    {
        if(xi==xii&&yi!=yii)
            //if(yi!=yii)
                d=fabs(x)+fabs(xi);
        else
        {
            k=(yi-yii)/(xi-xii);
            m=fabs(k*x+(-1)*y+yi-k*xi);
            n=fabs(sqrt(k*k+1));
            d=m/n;
        }
        if(d>r+0.001)
            printf("Disjoint");
        if(d<r-0.001)
            printf("Interseetion");
        if(fabs(d-r)<1e-3)
            printf("Tangency");
 }
关于浮点型数据的精度控制问题,在浮点型数据中,两个数的比较需要进行精度控制,">"形式,m>n+精度;"<"形式,m<n-精度;"="形式,fabs(m-n)<精度。
0 0