실수
실수
실수는 정수와 다른 형태의 저장 방식인 부동소수점 표기방식에 의해 저장되며, 실수의 저장 원리에서 살펴볼 수 있다. 중요한 특징들을 정리하면 다음과 같다.
실수의 종류는 2가지이다(
float
: 4byte,double
: 8byte)실수의 기본형태는
double
이다.실수가 포함된 계산은 결과가 무조건 실수이다.
실수는 표시하는 값이 정밀하지 않다.
실수는 저장공간의 크기와 관계없이 정수보다 크다.
실수는 순환형 구조를 가지지 않으며, 무한대라는 값을 허용한다.
실수 데모 1
import java.lang.*;
public class FloatExample1 {
public static void main(String[] args){
//float a = 3.14;//오류 발생
float a = 3.14f;
double b = 3.14;
System.out.println(a);
System.out.println(b);
}
}
위의 예제를 통해 float
와 double
의 초기화 방식의 차이에 대해 살펴볼 수 있다. double
이 기본형태이기 때문에 3.14
는 별다른 표시가 없다면 double
로 인식된다. 따라서 float
형태로는 저장될 수 없어 오류가 발생하게 된다.
실수 데모 2
import java.lang.*;
public class FloatExample2 {
public static void main(String[] args){
float a = 3.141592653589793238462643383279f;
double b = 3.141592653589793238462643383279f;
System.out.println(a);
System.out.println(b);
}
}
위의 예제는 각각 소수점 30자리의 숫자를 float
와 double
형태의 변수에 저장한 뒤 출력했을 때 표시되는 소수점의 길이를 살펴보기 위한 예제이다. 즉, 각각의 실수 형태에 대한 정확도가 얼마나 되는지를 살펴보는 것이 목적이다.
출력 결과는 다음과 같다.
3.1415927
3.1415927410125732
double
이 float
보다 정확도가 높은 것은 사실이나 둘 다 온전한 숫자를 다 포함할 수 없다는 특징을 가지고 있다. 따라서 정확한 계산을 수행해야 할 경우에는 자바에서 기본적으로 제공하는 실수를 이용하여 계산을 하기 어려우며, 별도의 도구를 이용해야 한다.
실수 데모 3
import java.lang.*;
public class FloatExample3 {
public static void main(String[] args){
int a = 10;
float b = 3.0f;
double c = 3.0;
float d = a / b;
double e = a / c;
System.out.println(d);
System.out.println(e);
}
}
실행하면 다음과 같은 결과가 나온다.
3.3333333
3.3333333333333335
앞서 정수를 살펴볼 때 10 / 3
이 3
임을 확인했으나 위의 코드는 실수가 포함되어있기 때문에 결과가 실수로 나오는 것을 확인할 수 있다. 좀 더 정확히 이야기하면, 계산식에 포함된 가장 큰 데이터 형태에 맞추어 출력된다는 것을 소수점 자리수를 통해 알 수 있다.
자료형의 크기에 대해서는 별도의 문서를 통해 정리하도록 한다.
실수 데모 4
import java.lang.*;
public class FloatExample4 {
public static void main(String[] args){
double a = 10.0;
double b = 0.0;
double c = a / b;
double d = a % b;
System.out.println(c);
System.out.println(d);
}
}
결과는 다음과 같이 출력된다.
Infinity
NaN
출력되는 값에 대한 설명은 다음과 같다.
Infinity : 양의 무한대를 의미한다. 음의 무한대는
-Infinity
이며 둘은 같지 않다.NaN :
Not a Number
의 줄임말이며, 숫자가 아니라는 의미이다.
정수에서는 오류가 발생하지만, 실수에서는 이와 같이 특수값들이 출력되므로 이용에 참고하도록 한다.
Last updated