課題挑戦記-1

8580 ワード

大学の宿題を記録するために自己記入を開始する


第一の課題は2点間の距離を計算する課題である


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関数は2点を入力する関数です


座標圧縮は2点(x 2-x 1)の2乗で座標圧縮を行う関数である


calculDistanceは平方根で距離を計算する関数であり,バビロン法を用いて解き,平方根と非常に類似した結果を得ることができる.



バビロン法とsqrtの誤差率が見られ,forゲートの回転に伴って現れ,ますます差がなくなった.