java.lang패키지(6) - Math 클래스

2021. 12. 27. 14:22·자바/java.lang 패키지

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
'자바/java.lang 패키지' 카테고리의 다른 글
  • java.lang패키지(7) - 래퍼(Wrapper) 클래스
  • java.lang패키지(5) - StringBuffer 클래스와 StringBuilder 클래스
  • java.lang패키지(4) - String 클래스(2)
  • java.lang패키지(3) - String 클래스(1)
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      코드트리
      java.time 패키지
      TCP 소켓 프로그래밍
      java.lang패키지
      다형성
      역직렬화
      ServerSocket
      알고스팟
      코딩트리조별과제
      중간연산
      불안정 정렬
      Collections Framework
      람다식
      outputstream
      map()
      코딩테스트
      유용한 클래스
      snail
      제자리 정렬
      InputStream
      소켓 프로그래밍
      문자 기반 스트림
      안드로이드 스튜디오
      스트림
      안정 정렬
      선택 정렬
      자바 개념
      serializable
      file
      Arrays
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    java.lang패키지(6) - Math 클래스
    상단으로

    티스토리툴바