프로그래밍을 하다보면 수학적 계산을 아주 많이 하게 된다. 특히, 코딩테스트를 준비하다보면 이러한 계산을 돕는 api들을 많이 찾게 된다. 필자도 해당 api가 필요할 때마다 찾아보곤 했는데, 이번에 자주 사용하는 메서드 위주로 한 번 정리해보려한다.
자바에서는 계산을 위한 Math 클래스를 제공한다. Math 클래스는 java.lang 패키지에 위치하고 있기 때문에 별도의 import 없이 사용 가능하다.
다음은 Math 클래스의 메서드를 표로 정리한 것이다.
구분 | 메서드 |
절대값 / 부호 | abs, signum |
최대, 최소 값 | max, min |
소수점 올림 / 버림 | ceil, floor, round, rint |
제곱 / 제곱근 | pow, scalb, sqrt, cbrt, hypot |
삼각 함수 관련 | toRadians, toDegrees, sin, cos, tan, asin, acos, atan, atan2, sinh, cosh, tanh |
로그 관련 | exp, getExponent, expm1, log, log1p, log10 |
난수 관련 | |
소수 관련 | ulp, nextAfter, nextUp, copySign |
절대값 / 부호
- abs() : 절대값 계산
- signum() : 부호 확인
@Test
void test() {
System.out.println(Math.abs(-35)); // 35
System.out.println(Math.abs(35)); // 35
System.out.println(Math.signum(7)); // 1.0
System.out.println(Math.signum(-12)); // -1.0
}
- Math.abs()
매개변수의 절대값을 반환한다. 두 점 사이의 거리를 구하는 등의 많은 문제에서 유용하게 사용된다.
ex) -35 -> 35
- Math.signum()
매개변수가 양수일 경우 1.0을, 음수일 경우 -1.0을 반환한다.
ex) -12 -> -1.0
최대, 최소 값
- min() : 두 매개변수 중 작은 값 리턴
- max() : 두 매개변수 중 큰 값 리턴
@Test
void test() {
System.out.println(Math.min(35.2, 12.1)); // 12.1
System.out.println(Math.min(-8, 2)); // -8
System.out.println(Math.max(1.2, 2)); // 2.0
System.out.println(Math.max(-3, -5)); // -3
}
- Math.min()
두 매개변수 중 작은 값을 리턴한다.
- Math.max()
두 매개변수 중 큰 값을 리턴한다.
소수점 올림 / 버림
- round() : 소수점 반올림 (정수형 리턴)
- rint() : 소수점 반올림 (double형 리턴)
- ceil() : 올림
- floor() : 버림
@Test
void test() {
System.out.println(Math.round(2.4)); // 2
System.out.println(Math.round(2.5)); // 3
System.out.println(Math.rint(2.4)); // 2.0
System.out.println(Math.rint(-1.7)); // -2.0
System.out.println(Math.ceil(-1.3)); // -1.0
System.out.println(Math.ceil(4.2)); // 5.0
System.out.println(Math.floor(3.9)); // 3.0
System.out.println(Math.floor(-3.6)); // -4.0
}
- Math.round()
소수점 반올림. 유일하게 정수를 반환한다.
ex) 2.4 -> 2
- Math.rint()
소수점 반올림. double 리턴
ex) 2.4 -> 2.0
- Math.ceil()
소수점 올림 처리. 음수일 경우 소수점 밑으로 버리고, 소수점 밑 1 이상의 양수일 경우 소수점을 버리고 +1 한다고 보면 된다.
ex) 4.2 -> 5.0
- Math.floor()
소수점 내림 처리. 소수점 밑 1 이상의 음수일 경우 소수점을 버리고 -1 한다고 보면 됨, 양수일 경우 소수점 밑으로 버림.
ex) 3.9 -> 3.0
제곱 / 제곱근
- sqrt() : 매개 변수의 제곱근을 구함
- cbrt() : 매개 변수의 세제곱근을 구함
- pow() : 첫 번째 매개 변수의 두 번째 매개변수만큼의 제곱 값을 구함
- scalb() : 첫 번째 매개변수 * 2^두 번째 매개변수 값을 구함.
- hypot() : (첫 번째 매개변수의 제곱 + 두 번째 매개변수의 제곱)의 제곱근을 구함.
@Test
void text() {
System.out.println(Math.sqrt(9)); // 3.0
System.out.println(Math.sqrt(25)); // 5.0
System.out.println(Math.cbrt(8)); // 2.0
System.out.println(Math.cbrt(64)); // 4.0
System.out.println(Math.pow(2, 6)); // 64.0
System.out.println(Math.pow(3, 3)); // 27.0
System.out.println(Math.scalb(3, 4)); // 48.0
System.out.println(Math.hypot(3, 4)); // 5.0
}
- Math.sqrt()
매개변수의 제곱근을 구한다.
ex) 9 = 3^2 => 3.0
- Math.cbrt()
매개변수의 세제곱근을 구한다.
ex) 64 = 4^3 = 4.0
- Math.pow()
첫 번째 매개 변수의 두 번째 매개변수만큼의 제곱 값을 구한다.
ex) Math.pow(2, 6) -> 2^6 = 2 * 2 * 2 * 2 * 2 * 2 = 64.0
- Math.scalb()
첫 번째 매개변수 * 2^두 번째 매개변수 값을 구한다.
ex) Math.scalb(3, 4) -> 3 * 2^4 = 3 * 16 = 48.0
- Math.hypot()
(첫 번째 매개변수의 제곱 + 두 번째 매개변수의 제곱)의 제곱근을 구함.
ex) Math.hypot(3, 4) -> (3^2 + 4^2) -> 25 의 제곱근 = 5.0
추가적으로 필요한 메서드들은 다음의 api 문서를 참고하자.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html
참고
- 자바의 신 1 - 이상민 저