나는 Single UNIX 사양을 기반으로 나만의 od 유틸리티를 만들고 있는데, 예를 들어 od -t f
. 나는 사양의 다른 모든 부분을 처리하는 완전한 기능을 갖춘 유틸리티를 가지고 있습니다. 이것은 또한 프로그래밍 질문이 아니라 부동 소수점에 덤프될 때 출력의 의미에 대한 질문입니다.
예를 들어, 다음 프로그램을 실행하면 표준 입력에 ASCII 문자를 제공합니다.하나다음 메시지가 나타납니다.
$ od -A n -t fD -
1.297e-320
내가 제공하기만 하면ㅏ
$ od -A n -t fD -
3.2e-322
A와 newline의 값이 각각 65와 10이라는 것을 알고 있으므로 이러한 기하급수적으로 작은 숫자가 문맥상 무엇을 의미하는지 모르겠습니다. 사양에서는 부동 소수점 숫자를 많이 다루지 않으므로 이에 대한 정보를 주시면 감사하겠습니다.
답변1
리틀 엔디안 시스템에서 이는 문자열, 부동 소수점 및 복식의 메모리 내 표현 결과입니다. "A", 65 또는 0x41로 시작하는 부동 소수점 숫자( od -t fF
)는
00000000000000000000000001000001
이는 9.1⋅10 -44 입니다 (참조:이 편리한 변환기) — 0 비트는 부호(양수), 0 지수(편향, 부동 소수점 숫자의 경우 -126) 및 분수 2 -17 + 2 -23 을 나타냅니다 . 따라서 표현된 값은 (2 -17 + 2 -23 ) × 2 -126 입니다 (참조:울프람 알파). 개행 문자를 추가하면 다음이 생성됩니다.
00000000000000000000101001000001
즉 3.678⋅10 -42 입니다 .
더블( od -t fD
)을 사용하면 숫자 앞에 또 다른 4바이트의 0이 추가됩니다. 이는 부호나 지수를 변경하지 않고 분수를 더 줄여 더블(-1022)과의 편차가 더 커집니다. 표시되는 숫자는 다음과 같습니다. 매우 작습니다(참조이것은 배정밀도를 사용하는 또 다른 변환기입니다.): "A"는 (2 -46 + 2 -52 ) × 2 -1022 입니다 (참조:울프람 알파), "A" 뒤에 개행 문자가 오는 경우는 (2 -41 + 2 -43 + 2 -46 + 2 -52 ) × 2 -1022 입니다 (참조).울프람 알파).