1. Math 클래스
- 기본적으로 Math 클래스는 생성자가 private으로 되어 있기 때문에 만들 수 없다. 그 이유는 인스턴스 변수가
없고 모두 다 static으로 되어 있기 때문이다.
- 상수로는 다음과 같다.
(1) E: 자연로그의 밑
(2) PI: 원주율
1-1. round() 메서드
- round() 메서드는 항상 첫째 자리에서 반올림을 해서 정수값(long)을 결과로 돌려준다.
- 그러나 그렇게 되면 두번째 자리 이상에서는 반올림을 할 수 없으므로, 아래의 순서를 따른다.
(1) 해당 N자리에서 반올림 한다면, 해당 자리수만큼 10^(N-1)을 곱한다.
(2) Math.round()를 사용한다.
(3) 10^(N-1)만큼 다시 나눠준다.
- 예를 들어, 90.7552에서 셋째 자리 반올림을 아래 순서대로 진행하면 된다.
(1) 90.7552 x 100 = 9075.52
(2) Math.round(9075.52)
(3) 9076 / 100 = 90.76
- ceil()과 floor() 메서드 각각은 ()에 넣은 값을 반올림하여 올리거나 내린다.
- rint() 메서드는 round()와 하는일은 같지만, 반환 타입이 double이다.
1-2. 예외를 발생시키는 메서드들
- 이 메서드들은 정수형간의 연산에서 발생할 수 있는 오버플로우를 감지하기 위해 등장했다.
- 그러나, 오버플로우에 대해 감지만 하고 발생 여부에 대해 알려주지 않는다.
- 그래서 예외(ArithmeticException)를 발생시킨다.
- 그런데 여기서 negateExact() 메서드를 보면 의문점이 생긴다. 어떻게 부호를 바꾸기만 하는데
오버플로우가 발생하는지 궁금하다. 찾아보니 그 이유는 부호를 반대로 바꾸는 식이 '~a +1' 때문이다.
여기서 '~a'의 결과가 최댓값이면 오버플로우가 발생할 수 있다. 즉, int 정수형의 범위는 (-a ~ a)가 아닌
-a ~ a-1 이어야 되기 때문이다.
( 만약 이 부분이 이해가 되지 않는다면, 1의 보수법과 정수형 범위를 한번 확인하는 것이 좋을 것 같다. )
( 자바의 정석(1의 보수법) : 123p )
( 자바의 정석(정수형 범위) : 63p )
1-3. 삼각함수와 지수, 로그
- 아래의 코드는 두 점 (x1, y1)와 (x2, y2)간의 거리를 계산하는 예제이다.
( 이때, a와 b 그리고 세터 값을 변수 a, b 그리고 atan2(a,b)로 구했다. )
( 아래의 그림은 2진수 24자리가 10진수의 몇 자리인지 알아보는 식이다. )
( 계산한 결과 7.2 이므로, 7자리의 값을 표현할 수 있는 것이다. )
( float는 가수 23자리만 정규화를 통해 1자리를 더 얻을 수 있으므로, 24자리이다. )
( double 또한 52 +1 자리이다. )
1-4. StricMath 클래스
- Math 클래스는 JVM이 설치된 OS의 메서드를 호출해서 사용한다. 즉, OS에 의존적인 계산을 하고 있다는 것이다.
- 그렇기 때문에, Math 클래스는 OS마다 반올림 처리법이 다 다를 수 있다. 그러므로, 이를 보완하기 위해 작성된 것이
StricMath 클래스이다.
1-5. Math 클래스의 메서드
- 가볍게 훑어보자.
(1) static (int, long, float, double) abs (int, long, float, double)
(절대값을 반환한다.)
(2) static (int, long, float, double) max or min (int, long, float, double)
(3) static double rint(double a)
(가장 가까운 숫자를 출력해준다.)
(4) static long round(double or float a)
다음장
java.lang패키지(7) - 래퍼(Wrapper) 클래스 (tistory.com)
java.lang패키지(7) - 래퍼(Wrapper) 클래스
1. 래퍼(Wrapper) 클래스 - 때로는 기본형 변수도 어쩔 수 없이 객체로 다뤄야 할 때, 기본형 값들을 객체로 변환하여 작업을 수행해야 한다. 이때, 사용되는 것이 래퍼 클래스이다. - 래퍼 클래스를
kind-coding.tistory.com
'자바 > java.lang 패키지' 카테고리의 다른 글
java.lang패키지(7) - 래퍼(Wrapper) 클래스 (0) | 2021.12.28 |
---|---|
java.lang패키지(5) - StringBuffer 클래스와 StringBuilder 클래스 (0) | 2021.12.26 |
java.lang패키지(4) - String 클래스(2) (0) | 2021.12.26 |
java.lang패키지(3) - String 클래스(1) (0) | 2021.12.24 |
java.lang 패키지(2) - Object 클래스(2) (0) | 2021.12.24 |