과제 도전기 - 1
대학 과제를 기록하고자 작성을 시작한다
첫번째 과제는 두 점사이의 거리를 계산하는 과제이다
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문을 돌리면서 나타내는데 점점 차이가 안나는 것을 볼 수 있다
Author And Source
이 문제에 관하여(과제 도전기 - 1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kimchiwarrior/과제-도전기-1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)