과제 도전기 - 1

8600 단어 CC

대학 과제를 기록하고자 작성을 시작한다

첫번째 과제는 두 점사이의 거리를 계산하는 과제이다

sqrt를 사용하면 쉽게 해결할 수 있지만 직접 제곱근을 만들기 위해 바빌로니아 법을 활용해서 계산을 했다

#include <stdio.h>
#include <math.h>

void print(int *x, int *y){
    printf("(x,y)의 좌표를 입력하세요 : ");
    scanf("%d %d",x,y);
}

int coordinateCompression(int coordinateOne, int coordinateTwo){
    int coordinate=1;
    for(int i=0;i<2;i++){
        coordinate*=(coordinateOne-coordinateTwo);
    }
    return coordinate;
}

double calculDistance(int x, int y){
    double tmp = (double)(x+y);
    double anyNumber = (double)(x+y)/2;
    double sqrtNumber = sqrt(x+y);
    for(int i=0;i<16;i++){
        anyNumber = (anyNumber+(tmp/anyNumber))/2;//바빌로니아 법
        printf("%f \n",(anyNumber-sqrtNumber)/sqrtNumber*100);
    }
    return anyNumber;
}

int main(void){
    int x1,y1;
    int x2,y2;
    
    print(&x1,&y1);
    print(&x2,&y2);
    int x = coordinateCompression(x1,x2);
    int y = coordinateCompression(y1,y2);

    printf("(%d,%d),(%d,%d)의 거리는 %f입니다.",x1,y1,x2,y2,calculDistance(x,y));
}

print 함수는 두 점을 입력받는 함수이다

coordinateCompression은 두 점(x2-x1)의 제곱을 통해 좌표압축을 하는 함수이다

calculDistance는 제곱근을 통해 거리를 계산하는 함수인데 바빌로니아법을 활용해 for문을 진행시키며 제곱근과 매우 유사한 결과를 얻을 수 있다


바빌로니아법과 sqrt의 오차율을 for문을 돌리면서 나타내는데 점점 차이가 안나는 것을 볼 수 있다

좋은 웹페이지 즐겨찾기