자바 의 부동 소수점 표시 방법

5110 단어 자바 기초 지식
자바 의 부동 소수점 표시 방법
  • 자바 의 부동 소수점 표시 방법
  • 1. 컴퓨터 에서 의 표현 방법
  • 2. 구체 적 인 분석 표시 방법
  • 소결
  • 3. 자리 옮 김 저장 소
  • 소결



  • 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. 십 진수 가 이 진수 로 바 뀌 기
    어떻게 십 진법 을 이 진 부동 소수점 으로 바 꿉 니까? 먼저 십 진법 의 부동 소수점 을 이 진 으로 바 꾸 는 부동 소수점 을 두 부분 으로 나 눕 니 다.
  • 정수 부분 을 먼저 2 진법 으로 전환한다.
  • 소수 부분 을 2 진법 으로 바 꾼 다음 정수 부분 과 소수 부분 을 더 합 니 다.

  • 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 을 빼 야 합 니 다)
    작은 매듭
  • 또한 주의해 야 할 것 은 float 의 경우 가장 높 은 위 치 는 전체 수의 기호 위 치 를 나타 내 고 지수 위 치 는 모두 8 자리 이 며 가장 높 은 위 치 는 지수 위의 플러스 와 마이너스 를 나타 낸다. E - 100 과 같은 상황 일 수 있 기 때문에 8 자리 가 있 지만 가장 높 은 위 치 는 기호 위치 일 뿐 나머지 7 자리 가 진정한 수 치 를 나타 내 는 것 도 시 프 트 저장 소 를 사용 하 는 이유 이다.
  • 한 숫자 에 대해 플 로 트 와 의 범 위 를 초과 하지 않 고 소수 부분 이 무한 소수 가 아니라면 대응 하 는 double 유형 과 같 을 수 있다.

  • 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) 사용
  • 는 0 + 127 = 127 즉 0000 + 0111 1111 = 0111 1111
  • 을 나타 낸다.
  • 1 1 + 127 = 128 즉 0000 0001 + 0111 1111 = 0111 1111
  • 는 128 + 127 = 255 즉 1000 0000 + 0111 1111 = 111 1111
  • 을 나타 낸다.
    가장 큰 정수 가 아무리 크 더 라 도 넘 칠 것 이다.
  • - 1 - 1 + 127 = 126 = 127 - 1 즉 0111 1111 - 0000 0001 = 0111 1110
  • - 1 - 2 + 127 = 125 = 127 - 2 즉 0111 1111 - 0000 0010 = 0111 1101
  • - 127 - 127 + 127 = 0 즉 0111 1111 - 0111 1111 = 0000 0000
  • 가장 작은 음수 가 학교 에서 넘 쳤 다.
    작은 매듭
    위의 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 을 나타 낸다.

    좋은 웹페이지 즐겨찾기