자바 의 부동 소수점 표시 방법
5110 단어 자바 기초 지식
1. 컴퓨터 에서 의 표현 방법
float 에 대해 말하자면 4 개의 바이트, 32 위, 0 - 22 위 는 꼬리 수 를 나타 내 고 23 - 30 (8 위) 은 지 수 를 나타 내 며 31 위 는 기호 위 를 나타 낸다.
더 블 의 경우 8 개의 바이트, 64 위, 0 - 51 은 꼬리 수 를 나타 내 고 52 - 62 (11 위) 는 지 수 를 나타 내 며 63 위 는 기호 위 치 를 나타 낸다.
2. 구체 적 인 분석 표시 방법
예제 로 시작 하 다
public static void main(String[] args) {
float f1=20f;
float f2=20.3f;
float f3=20.5f;
double d1=20;
double d2=20.3;
double d3=20.5;
System.out.println(f1==d1);
System.out.println(f2==d2);
System.out.println(f3==d3);
}
true
false
true
20:
다음 과 같이 표시 합 니 다: 지수 위 치 를 옮 겨 저장 해 야 합 니 다. 즉, float + 127 (2 ^ 7 - 1), double + 1023 (2 ^ 10 - 1)
f:0|1000 0011|0100 0000 0000 0000 0000 000
d:0|100 0000 0011|0100 0000(01 50 0)
비교 할 때 기호 위치, 지수 위치, 작은 숫자 로 각각 비교 하고 부족 한 부분 은 0 으로 보완 하기 때문에 같다.
기호 위 치 는 모두 0 이다.
지수 비트 float 에서 127 을 빼 고 앞에서 0 을 보충 하 며 double 에서 1023 을 뺀 다.
끝자리
그래서 같다.
20.3
1. 십 진수 가 이 진수 로 바 뀌 기
어떻게 십 진법 을 이 진 부동 소수점 으로 바 꿉 니까? 먼저 십 진법 의 부동 소수점 을 이 진 으로 바 꾸 는 부동 소수점 을 두 부분 으로 나 눕 니 다.
20.3 변환 을 예 로 들 면,
20 변환 후 10100 으로 변경
0.3 2 진법 을 바 꾸 려 면 2 를 곱 하고 곱 한 후에 정수 부분 을 취한 다음 에 곱 한 결과 로 정수 부분 을 뺀 다음 에 2 를 곱 해 야 한다. 마지막 에 소수 나 소수 가 순환 하지 않 을 때 까지 곱 하 는 것 이다.
20 = 10100 (바 이 너 리)
0.3 * 2= 0.6 (0)
0.6 * 2 = 1.2 (1)
0.2 * 2= 0.4 (0)
0.4 * 2 = 0.8 (0)
0.8 *2 = 1.6 (1)
여기까지 계산 하면 0.6 이 더 나 와 순환 에 들 어 갈 것 입 니 다. 그래서 결 과 는...
0.3 = 0.010011001…1001
그래서 20.3 = 10100.0100110011001... 1001 (바 이 너 리).
2. 이 진수 가 과학 계수 법 으로 전환
20.3 = 10100.0100110011001... 1001 (이 진) = 1.0100010011001011E10.... (십 진법 과학 계수) = 1.0100010011001E100... (이 진 과학 계수)
여 기 는 위치 이동 저장 소 를 사용 합 니 다. float 에 있어 지수 위 치 는 127, double 위 에 1023 을 더 합 니 다. (여 기 는 저장 소 를 말 하 는데 비교 할 때 각각 127 과 1023 을 빼 야 합 니 다)
작은 매듭
3. 자리 옮 김 저장 소
시 프 트 저장 소 는 본질 적 으로 + 0 과 - 0 의 일치 성 을 확보 하기 위해 서 입 니 다.
float 지수 부분의 이 8 명 으로 분석 하면,
그러면 이 8 자리 로 구 성 된 새로운 바이트 입 니 다. 우 리 는 아래 의 숫자 로 0000 만 을 표시 합 니 다.
우선, 우 리 는 시 프 트 저장 기술 을 사용 하지 않 고 이 8 비트 로 구 성 된 새로운 바이트 만 보면 몇 개의 수 를 표시 할 수 있 는 지 가정 합 니 다. 0000 - 111 1111 즉 0 - 255 로 모두 256 개의 수 를 표시 할 수 있 습 니 다.
그러나 우 리 는 이 8 자리 수 는 양수 도 마이너스 도 표시 해 야 한 다 는 것 을 안다.
그래서 왼쪽 첫 번 째 를 꺼 내 서 플러스 와 마이너스 의 부 호 를 표시 합 니 다.
첫 번 째 구간:
0 000 0000-0 111 1111
+0 127
두 번 째 구간:
1 000 0000-1 111 1111
-0 -127
이것 이 바로 문제 의 소재 이다. 어떻게 0 이 두 개 있 고, 하 나 는 0 이 고, 하 나 는 0 이다.
이 때 위치 이동 저장 소 사용: float 127 (0011 1111) 사용
가장 큰 정수 가 아무리 크 더 라 도 넘 칠 것 이다.
작은 매듭
위의 6 가지 예 를 들 어 우 리 는 규칙 을 얻 을 수 있다. 이 위 저장 기술 을 사용 하면 우 리 는 8 비트 2 진법 으로 - 127 ~ 128 에서 모두 127 개의 마이너스 + 0 (0) + 128 개의 정수 가 모두 256 개의 수 를 표시 할 수 있다. 보아하니 이 위 저장 소 를 사용 하면 + 0 과 - 0 의 문제 가 없 는 것 같 고 이 새로 생 성 된 8 비트 2 진법 수 를 충분히 사용 하여 단일 정밀도 부동 점 수 를 최대한 나타 낸다.매우 합 리 적 입 니 다. 다만 여기 서 여러분 이 주의해 야 할 것 은 위치 이동 저장 기술 을 사용 할 때 얻 은 두 구간 입 니 다.
0 000000 0~ 0 111111 1
여기 서 엄밀 하지 않 게 0 구간 이 라 고 부 르 며 0 구간 에 서 는 - 127 ~ 0, 0 이 이 구간 에 포함 된다.
0 000000 은 0 이 아니 라 - 127 을 나타 낸다.
0 111 111 1 은 0 이지 + 127 이 아니 라 0 을 나타 낸다.
1 000000 0~ 1 111111 1
여기 서 우 리 는 1 구간 이 라 고 부 르 는데, 1 구간 내 에서 1 ~ 128 을 나타 낸다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 의 부동 소수점 표시 방법먼저 십 진법 의 부동 소수점 을 이 진 으로 바 꾸 는 부동 소수점 을 두 부분 으로 나 눕 니 다. 한 숫자 에 대해 플 로 트 와 의 범 위 를 초과 하지 않 고 소수 부분 이 무한 소수 가 아니라면 대응 하 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.