1. 개요
이 사용방법(예제)에서는 Java의 무한대 개념과 이를 사용하는 방법을 살펴보겠습니다.
2. Java의 숫자 소개
수학에는 실수 집합과 정수 집합이 있습니다. 분명히, 이 두 집합은 모두 무제한이며 둘 다 양수 및 음수 무한대를 포함합니다.
컴퓨터 세계에서 우리는 이러한 집합에 대한 값을 저장할 수 있는 메모리 위치가 필요하며 컴퓨터의 메모리가 유한한 것처럼 이 위치도 유한해야 합니다.
Java의 int 유형의 경우 무한대 개념은 다루지 않습니다. 선택한 메모리 위치에 맞는 정수만 저장할 수 있습니다.
실수의 경우 양수 또는 음수 무한대 개념도 있습니다. 32비트 float 유형과 64비트 double 유형은 Java에서 이를 지원합니다. 앞으로는 double 유형이 Java에서 실수에 가장 많이 사용되는 유형이므로 예를 들어 Double 유형을 사용할 것입니다. 정밀도가 더 좋기 때문입니다.
3. 양의 무한대
Double.POSITIVE_INFINITY 상수 는 double 유형의 양의 무한대 값을 보유합니다 . 이 값은 1.0 을 0.0 으로 나눈 값입니다 . 문자열 표현은 Infinity 입니다 . 이 값은 규칙이며 16진수 표현은 7FF0000000000000 입니다. 이 비트 값을 가진 모든 double 변수는 양의 무한대를 포함합니다.
4. 음의 무한대
Double.NEGATIVE_INFINITY 상수 는 double 유형의 음의 무한대 값을 보유합니다 . 이 값은 -1.0 을 0.0 으로 나눈 값입니다 . 문자열 표현은 -Infinity 입니다 . 이 값도 규칙이며 16진수 표현은 FFF0000000000000 입니다. 이 비트 값을 가진 모든 double 변수는 음의 무한대를 포함합니다.
5. 무한대 작업
positiveInfinity 라는 이중 변수를 선언하고 여기에 Double.POSITIVE_INFINITY 값 과 다른 이중 변수 negativeInfinity 를 할당하고 Double.NEGATIVE_INFINITY 값을 할당해 보겠습니다 . 그런 다음 작업에 대해 다음과 같은 결과를 얻습니다.
Double positiveInfinity = Double.POSITIVE_INFINITY;
Double negativeInfinity = Double.NEGATIVE_INFINITY;
assertEquals(Double.NaN, (positiveInfinity + negativeInfinity));
assertEquals(Double.NaN, (positiveInfinity / negativeInfinity));
assertEquals(Double.POSITIVE_INFINITY, (positiveInfinity - negativeInfinity));
assertEquals(Double.NEGATIVE_INFINITY, (negativeInfinity - positiveInfinity));
assertEquals(Double.NEGATIVE_INFINITY, (positiveInfinity * negativeInfinity));
여기서 상수 Double.NaN 은 숫자가 아닌 결과를 나타냅니다.
무한대와 양수를 사용하는 수학 연산을 살펴보겠습니다.
Double positiveInfinity = Double.POSITIVE_INFINITY;
Double negativeInfinity = Double.NEGATIVE_INFINITY;
double positiveNumber = 10.0;
assertEquals(Double.POSITIVE_INFINITY, (positiveInfinity + positiveNumber));
assertEquals(Double.NEGATIVE_INFINITY, (negativeInfinity + positiveNumber));
assertEquals(Double.POSITIVE_INFINITY, (positiveInfinity - positiveNumber));
assertEquals(Double.NEGATIVE_INFINITY, (negativeInfinity - positiveNumber));
assertEquals(Double.POSITIVE_INFINITY, (positiveInfinity * positiveNumber));
assertEquals(Double.NEGATIVE_INFINITY, (negativeInfinity * positiveNumber));
assertEquals(Double.POSITIVE_INFINITY, (positiveInfinity / positiveNumber));
assertEquals(Double.NEGATIVE_INFINITY, (negativeInfinity / positiveNumber));
assertEquals(Double.NEGATIVE_INFINITY, (positiveNumber - positiveInfinity));
assertEquals(Double.POSITIVE_INFINITY, (positiveNumber - negativeInfinity));
assertEquals(0.0, (positiveNumber / positiveInfinity));
assertEquals(-0.0, (positiveNumber / negativeInfinity));
이제 무한대와 음수를 사용하는 수학 연산을 살펴보겠습니다.
Double positiveInfinity = Double.POSITIVE_INFINITY;
Double negativeInfinity = Double.NEGATIVE_INFINITY;
double negativeNumber = -10.0;
assertEquals(Double.POSITIVE_INFINITY, (positiveInfinity + negativeNumber));
assertEquals(Double.NEGATIVE_INFINITY, (negativeInfinity + negativeNumber));
assertEquals(Double.POSITIVE_INFINITY, (positiveInfinity - negativeNumber));
assertEquals(Double.NEGATIVE_INFINITY, (negativeInfinity - negativeNumber));
assertEquals(Double.NEGATIVE_INFINITY, (positiveInfinity * negativeNumber));
assertEquals(Double.POSITIVE_INFINITY, (negativeInfinity * negativeNumber));
assertEquals(Double.NEGATIVE_INFINITY, (positiveInfinity / negativeNumber));
assertEquals(Double.POSITIVE_INFINITY, (negativeInfinity / negativeNumber));
assertEquals(Double.NEGATIVE_INFINITY, (negativeNumber - positiveInfinity));
assertEquals(Double.POSITIVE_INFINITY, (negativeNumber - negativeInfinity));
assertEquals(-0.0, (negativeNumber / positiveInfinity));
assertEquals(0.0, (negativeNumber / negativeInfinity));
이러한 작업을 더 잘 기억하기 위한 몇 가지 경험 법칙이 있습니다.
- 음수 및 양수 무한대를 각각 Infinity 및 -Infinity로 바꾸고 부호 연산을 먼저 수행합니다.
- 0과 무한대가 아닌 숫자 사이의 모든 작업에 대해 무한대의 결과를 얻습니다.
- 양의 무한대와 음의 무한대를 더하거나 나눌 때 결과 가 나오지 않습니다.
6. 0으로 나누기
0으로 나누기는 음수 및 양수 무한대 값을 생성하기 때문에 나누기의 특별한 경우입니다.
예시를 위해 이중 값 d 를 취하고 다음을 0으로 나눈 결과를 확인합니다.
double d = 1.0;
assertEquals(Double.POSITIVE_INFINITY, (d / 0.0));
assertEquals(Double.NEGATIVE_INFINITY, (d / -0.0));
assertEquals(Double.NEGATIVE_INFINITY, (-d / 0.0));
assertEquals(Double.POSITIVE_INFINITY, (-d / -0.0));
7. 결론
이 기사에서는 Java에서 양수 및 음수 무한대의 개념과 사용법을 살펴보았습니다. 구현 및 코드 스니펫은 GitHub 에서 찾을 수 있습니다 .