λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

μžλ°” 제곱근(루트) κ΅¬ν•˜κΈ° Math.sqrt()

by 5566 2023. 8. 10.

1. μžλ°”μ—μ„œ μ œκ³±κ·Όμ„ κ΅¬ν•˜λŠ” 방법 μ†Œκ°œ

μžλ°”μ—μ„œ μ œκ³±κ·Όμ„ κ΅¬ν•˜λŠ” 방법은 μ—¬λŸ¬ 가지가 μžˆμŠ΅λ‹ˆλ‹€. κ·Έ μ€‘μ—μ„œ κ°€μž₯ κ°„νŽΈν•˜κ³  ν”νžˆ μ‚¬μš©λ˜λŠ” 방법은 Math.sqrt() λ©”μ†Œλ“œλ₯Ό ν™œμš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. Math.sqrt() λ©”μ†Œλ“œλŠ” Math 클래슀의 정적인 λ©”μ†Œλ“œλ‘œμ„œ, κ΄„ν˜Έ μ•ˆμ— μ œκ³±κ·Όμ„ κ΅¬ν•˜κ³ μž ν•˜λŠ” 값을 λ„£μ–΄ ν˜ΈμΆœν•˜λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

λ‹€μŒμ€ μ‚¬μš© μ˜ˆμ‹œμž…λ‹ˆλ‹€.

double squareRoot = Math.sqrt(25);

μœ„μ˜ μ½”λ“œλŠ” 25의 μ œκ³±κ·Όμ„ κ΅¬ν•˜λŠ” μ˜ˆμ‹œμž…λ‹ˆλ‹€. Math.sqrt(25)λ₯Ό ν˜ΈμΆœν•˜λ©΄ 5.0μ΄λΌλŠ” 값을 λ°˜ν™˜ν•˜κ²Œ λ©λ‹ˆλ‹€.

μ΄μ œλΆ€ν„° μžμ„Ένžˆ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

2. Math.sqrt() λ©”μ†Œλ“œμ˜ κΈ°λŠ₯κ³Ό μ‚¬μš©λ²• μ„€λͺ…

Math.sqrt() λ©”μ†Œλ“œλŠ” 주어진 숫자의 μ œκ³±κ·Όμ„ κ³„μ‚°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 이 λ©”μ†Œλ“œλŠ” 정적(static) λ©”μ†Œλ“œλ‘œ μ„ μ–Έλ˜μ–΄ μžˆμœΌλ―€λ‘œ, Math 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ λ°”λ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Math.sqrt() λ©”μ†Œλ“œμ˜ μ‚¬μš©λ²•μ€ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

double squareRoot = Math.sqrt(value);

μœ„μ˜ μ½”λ“œμ—μ„œ valueλŠ” μ œκ³±κ·Όμ„ κ΅¬ν•˜κ³ μž ν•˜λŠ” μˆ«μžμž…λ‹ˆλ‹€. valueλŠ” double ν˜•μ‹μœΌλ‘œ 지정될 수 μžˆμŠ΅λ‹ˆλ‹€.

Math.sqrt() λ©”μ†Œλ“œλŠ” 주어진 숫자의 μ–‘μ˜ 제곱근 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€. λ°˜ν™˜ 값은 double ν˜•μ‹μœΌλ‘œ 이루어져 있으며, 제곱근의 κ°’ 자체λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, Math.sqrt(25)의 κ²°κ³ΌλŠ” 5.0이 되며, Math.sqrt(9)의 κ²°κ³ΌλŠ” 3.0이 λ©λ‹ˆλ‹€.

μ£Όμ˜ν•  점은, Math.sqrt() λ©”μ†Œλ“œλŠ” 음의 숫자λ₯Ό 인자둜 λ°›μ•˜μ„ λ•Œ μœ νš¨ν•œ κ²°κ³Όλ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 음수λ₯Ό 인자둜 μ‚¬μš©ν•  경우 NaN 값을 λ°˜ν™˜ν•˜κ²Œ λ©λ‹ˆλ‹€. λ”°λΌμ„œ 음수의 μ œκ³±κ·Όμ„ 계산해야 ν•  경우 μ˜ˆμ™Έ 처리λ₯Ό ν•΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.

λ‹€μŒμœΌλ‘œ μ œκ³±κ·Όμ„ κ΅¬ν•˜λŠ” λ‹€λ₯Έ 방법듀에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

3. Math.sqrt() λ©”μ†Œλ“œμ˜ μ‚¬μš© μ˜ˆμ‹œμ™€ κ²°κ³Ό 확인

λ‹€μŒμ€ Math.sqrt() λ©”μ†Œλ“œμ˜ μ‚¬μš© μ˜ˆμ‹œμ™€ κ²°κ³Όλ₯Ό ν™•μΈν•˜λŠ” λ‚΄μš©μž…λ‹ˆλ‹€.

μ˜ˆμ‹œ 1

double squareRoot = Math.sqrt(25);
System.out.println(squareRoot);

μœ„μ˜ μ½”λ“œμ—μ„œ Math.sqrt(25)λ₯Ό ν˜ΈμΆœν•˜μ—¬ 25의 μ œκ³±κ·Όμ„ κ³„μ‚°ν•˜κ³ , κ·Έ κ²°κ³Όλ₯Ό squareRoot λ³€μˆ˜μ— μ €μž₯ν•©λ‹ˆλ‹€. 이후 System.out.println(squareRoot)λ₯Ό μ‚¬μš©ν•˜μ—¬ 제곱근 값을 좜λ ₯ν•©λ‹ˆλ‹€. μ‹€ν–‰ κ²°κ³ΌλŠ” 5.0이 λ©λ‹ˆλ‹€.

μ˜ˆμ‹œ 2

double squareRoot = Math.sqrt(14);
System.out.println(squareRoot);

μœ„μ˜ μ½”λ“œμ—μ„œ Math.sqrt(14)λ₯Ό ν˜ΈμΆœν•˜μ—¬ 14의 μ œκ³±κ·Όμ„ κ³„μ‚°ν•˜κ³ , κ·Έ κ²°κ³Όλ₯Ό squareRoot λ³€μˆ˜μ— μ €μž₯ν•©λ‹ˆλ‹€. 이후 System.out.println(squareRoot)λ₯Ό μ‚¬μš©ν•˜μ—¬ 제곱근 값을 좜λ ₯ν•©λ‹ˆλ‹€. μ‹€ν–‰ κ²°κ³ΌλŠ” 3.7416573867739413이 λ©λ‹ˆλ‹€.

μ˜ˆμ‹œ 3

double squareRoot = Math.sqrt(-9);
System.out.println(squareRoot);

μœ„μ˜ μ½”λ“œμ—μ„œ Math.sqrt(-9)λ₯Ό ν˜ΈμΆœν•˜μ—¬ -9의 μ œκ³±κ·Όμ„ κ³„μ‚°ν•˜κ³ , κ·Έ κ²°κ³Όλ₯Ό squareRoot λ³€μˆ˜μ— μ €μž₯ν•©λ‹ˆλ‹€. 이후 System.out.println(squareRoot)λ₯Ό μ‚¬μš©ν•˜μ—¬ 제곱근 값을 좜λ ₯ν•©λ‹ˆλ‹€. μ‹€ν–‰ κ²°κ³ΌλŠ” NaN이 λ©λ‹ˆλ‹€. μ΄λŠ” 음수의 μ œκ³±κ·Όμ€ μœ νš¨ν•œ κ²°κ³Όλ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ‹œλ₯Ό 톡해 Math.sqrt() λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ œκ³±κ·Όμ„ κ΅¬ν•˜λŠ” 방법과 κ·Έ κ²°κ³Όλ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 음수 값에 λŒ€ν•œ μ˜ˆμ™Έ μ²˜λ¦¬κ°€ ν•„μš”ν•œ 점에도 μœ μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이제 μ œκ³±κ·Όμ„ κ΅¬ν•˜λŠ” λ‹€λ₯Έ 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

4. μžλ°”μ—μ„œ λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ μ œκ³±κ·Όμ„ κ΅¬ν•˜λŠ” 방법듀 μ†Œκ°œ

μžλ°”μ—μ„œ μ œκ³±κ·Όμ„ κ΅¬ν•˜λŠ” λ‹€λ₯Έ 방법듀을 μ†Œκ°œν•©λ‹ˆλ‹€.

1. Math.pow() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ 방법

Math.pow() λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ œκ³±μ„ κ³„μ‚°ν•˜κ³ , κ·Έ 결과에 λ‹€μ‹œ Math.sqrt() λ©”μ†Œλ“œλ₯Ό μ μš©ν•˜μ—¬ μ œκ³±κ·Όμ„ ꡬ할 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 16의 μ œκ³±κ·Όμ„ κ³„μ‚°ν•˜λ €λ©΄ Math.sqrt(Math.pow(16, 2))와 같이 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

double squareRoot = Math.sqrt(Math.pow(16, 2));
System.out.println(squareRoot);

2. Babylonian Methodλ₯Ό μ΄μš©ν•œ 방법

Babylonian MethodλŠ” 근사적인 λ°©λ²•μœΌλ‘œ μ œκ³±κ·Όμ„ κ³„μ‚°ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. 이 방법은 μ œκ³±κ·Όμ„ 찾고자 ν•˜λŠ” μˆ«μžμ™€ μž„μ˜μ˜ guess 값을 μ‚¬μš©ν•˜μ—¬ 근사 값을 반볡적으둜 μ—…λ°μ΄νŠΈν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

public static double sqrt(double number) {
    double guess = number / 2;
    double epsilon = 0.000001;

    while (Math.abs(guess * guess - number) >= epsilon) {
        guess = (guess + number / guess) / 2;
    }

    return guess;
}

μœ„μ˜ μ½”λ“œλŠ” sqrt() λ©”μ†Œλ“œλ₯Ό μ •μ˜ν•œ μ˜ˆμ‹œμž…λ‹ˆλ‹€. sqrt() λ©”μ†Œλ“œλŠ” 주어진 숫자의 μ œκ³±κ·Όμ„ κ³„μ‚°ν•˜μ—¬ λ°˜ν™˜ν•©λ‹ˆλ‹€. guess 값은 μ΄ˆκΈ°μ— 주어진 숫자의 절반이며, epsilon 값은 μ›ν•˜λŠ” 정확도λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 반볡적으둜 guess 값을 μ—…λ°μ΄νŠΈν•˜μ—¬ 근사 값을 κ΅¬ν•˜κ³ , κ΅¬ν•œ κ°’μ˜ 제곱이 주어진 μˆ«μžμ™€μ˜ 차이가 epsilon μ΄ν•˜κ°€ 될 λ•ŒκΉŒμ§€ λ°˜λ³΅ν•©λ‹ˆλ‹€.

double squareRoot = sqrt(25);
System.out.println(squareRoot);

μœ„μ˜ μ½”λ“œμ—μ„œ sqrt(25)λ₯Ό ν˜ΈμΆœν•˜μ—¬ 25의 μ œκ³±κ·Όμ„ κ³„μ‚°ν•˜κ³ , κ·Έ κ²°κ³Όλ₯Ό squareRoot λ³€μˆ˜μ— μ €μž₯ν•©λ‹ˆλ‹€. 이후 System.out.println(squareRoot)λ₯Ό μ‚¬μš©ν•˜μ—¬ 제곱근 값을 좜λ ₯ν•©λ‹ˆλ‹€.

이처럼 Math.pow() λ©”μ†Œλ“œμ™€ Babylonian Methodλ₯Ό μ‚¬μš©ν•˜μ—¬ μžλ°”μ—μ„œ μ œκ³±κ·Όμ„ ꡬ할 수 μžˆμŠ΅λ‹ˆλ‹€. 각각의 방법은 λ‹€λ₯΄κ²Œ λ™μž‘ν•  수 μžˆμœΌλ―€λ‘œ, 상황에 맞게 μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€.

5. Math.sqrt() λ©”μ†Œλ“œλ₯Ό ν™œμš©ν•œ μ‹€μ œ μ˜ˆμ‹œ 및 μ‘μš© 사둀

Math.sqrt() λ©”μ†Œλ“œλŠ” μ œκ³±κ·Όμ„ κ΅¬ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” 것 외에도 λ‹€μ–‘ν•œ μ‹€μ œ μ˜ˆμ‹œ 및 μ‘μš© μ‚¬λ‘€μ—μ„œ μœ μš©ν•˜κ²Œ ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. 이번 μ„Ήμ…˜μ—μ„œλŠ” λͺ‡ 가지 μ˜ˆμ‹œμ™€ μ‘μš© 사둀λ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

μ˜ˆμ‹œ 1: μ„ μ˜ 길이 κ΅¬ν•˜κΈ°

μ„ μ˜ 길이λ₯Ό κ΅¬ν•˜λŠ” λ¬Έμ œμ—μ„œ Math.sqrt() λ©”μ†Œλ“œλ₯Ό ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ„ μ˜ 길이λ₯Ό μ•ŒκΈ° μœ„ν•΄μ„œλŠ” μ’Œν‘œν‰λ©΄ μƒμ˜ 두 점 μ‚¬μ΄μ˜ 거리λ₯Ό ꡬ해야 ν•˜λŠ”λ°, μ΄λŠ” ν”Όνƒ€κ³ λΌμŠ€μ˜ 정리에 μ˜ν•΄ μ„±λ¦½ν•©λ‹ˆλ‹€. λ‹€μŒμ€ (x1, y1) μ’Œν‘œμ™€ (x2, y2) μ’Œν‘œ μ‚¬μ΄μ˜ 거리λ₯Ό κ΅¬ν•˜λŠ” μ˜ˆμ‹œμž…λ‹ˆλ‹€.

int x1 = 1;
int y1 = 2;
int x2 = 4;
int y2 = 6;

double distance = Math.sqrt(Math.pow((x2 - x1), 2) + Math.pow((y2 - y1), 2));
System.out.println(distance);

μœ„μ˜ μ½”λ“œμ—μ„œλŠ” 주어진 μ’Œν‘œλ‘œλΆ€ν„° 두 점 μ‚¬μ΄μ˜ 거리λ₯Ό κ³„μ‚°ν•˜μ—¬ distance λ³€μˆ˜μ— μ €μž₯ν•˜κ³ , κ·Έ 값을 좜λ ₯ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ 2: μ‚Όκ°ν˜•μ˜ 넓이 κ΅¬ν•˜κΈ°

μ‚Όκ°ν˜•μ˜ 넓이λ₯Ό κ΅¬ν•˜λŠ” λ¬Έμ œμ—μ„œλ„ Math.sqrt() λ©”μ†Œλ“œλ₯Ό ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ‚Όκ°ν˜•μ˜ 넓이λ₯Ό κ΅¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ°‘λ³€κ³Ό 높이λ₯Ό κ³±ν•œ ν›„ 2둜 λ‚˜λˆ μ•Ό ν•©λ‹ˆλ‹€. λ‹€μŒμ€ λ°‘λ³€κ³Ό 높이가 μ£Όμ–΄μ‘Œμ„ λ•Œ μ‚Όκ°ν˜•μ˜ 넓이λ₯Ό κ΅¬ν•˜λŠ” μ˜ˆμ‹œμž…λ‹ˆλ‹€.

int base = 5;
int height = 8;

double area = (base * height) / 2.0;
System.out.println(area);

μœ„μ˜ μ½”λ“œμ—μ„œλŠ” 주어진 λ°‘λ³€κ³Ό λ†’μ΄λ‘œλΆ€ν„° μ‚Όκ°ν˜•μ˜ 넓이λ₯Ό κ³„μ‚°ν•˜μ—¬ area λ³€μˆ˜μ— μ €μž₯ν•˜κ³ , κ·Έ 값을 좜λ ₯ν•©λ‹ˆλ‹€.

μ‘μš© 사둀: κ·Έλž˜ν”½ 처리

Math.sqrt() λ©”μ†Œλ“œλŠ” κ·Έλž˜ν”½ μ²˜λ¦¬μ™€ κ΄€λ ¨λœ λ‹€μ–‘ν•œ μ‘μš© μ‚¬λ‘€μ—μ„œ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ’Œν‘œν‰λ©΄ μƒμ˜ 점과 점 μ‚¬μ΄μ˜ 거리λ₯Ό κ³„μ‚°ν•˜μ—¬ 두 점 μ‚¬μ΄μ˜ 선을 κ·Έλ¦¬λŠ” λ“±μ˜ μž‘μ—…μ—μ„œ μœ μš©ν•˜κ²Œ ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, 제곱근이 ν•„μš”ν•œ μˆ˜ν•™μ μΈ 계산도 많이 μžˆμ–΄ Math.sqrt() λ©”μ†Œλ“œλ₯Ό ν™œμš©ν•˜μ—¬ νŽΈλ¦¬ν•˜κ²Œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ‹œμ™€ μ‘μš© 사둀λ₯Ό 톡해 Math.sqrt() λ©”μ†Œλ“œλ₯Ό μ‹€μ œλ‘œ ν™œμš©ν•˜μ—¬ λ‹€μ–‘ν•œ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŒμ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. Math.sqrt() λ©”μ†Œλ“œμ˜ ν™œμš©μ€ νŽΈλ¦¬ν•˜λ©°, μˆ«μžμ™€ μˆ˜ν•™ κ΄€λ ¨ μž‘μ—…μ—μ„œ λ‹€μ–‘ν•œ μš©λ„λ‘œ ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

λŒ“κΈ€