추가2:
그리고 메모리에는 2진수로 변환되어 있기 때문에, 지수와 기수를 읽어도 우리가 흔히 사용하는 10진수와는 형태가 다릅니다. 사실상 부호 정도만 인식이 가능하지요. 10진수 일 때의 지수로 변환하는 것도 상당히 골치아픈 문제입니다. -_-;; (수학 라이브러리를 찾아보셔야 할 듯...)
참고로 다음은 FreeBSD의 fpmath.h 파일의 내용을 발췌한 것입니다.
union IEEEf2bits {
float f;
struct {
#if _BYTE_ORDER == _LITTLE_ENDIAN
unsigned int man :23;
unsigned int exp :8;
unsigned int sign :1;
#else /* _BIG_ENDIAN */
unsigned int sign :1;
unsigned int exp :8;
unsigned int man :23;
#endif
} bits;
};
일요일이라(?) 한번 만들어봤습니다. (간단한 함수가 이미 있었으면 낭패
일요일이라(?) 한번 만들어봤습니다. (간단한 함수가 이미 있었으면 낭패. -_-; )
테스트는 2개만 했지만 잘 되는걸 보니... 머 맞겠죠. 흐흐;;;
부동소수점 구조는 IEEE 754에 정의되어 있습니다.http:/
부동소수점 구조는 IEEE 754에 정의되어 있습니다.
http://en.wikipedia.org/wiki/IEEE_floating-point_standard
여기 보면 float하고 double (float)이 정의되어 있구요.
long double 이라고 80비트인가 96비트인가가 있는데 그건 나와있지 않네요.
물론 CPU의 바이트 순서를 잘 확인해서 읽으셔야합니다.
추가:
http://babbage.cs.qc.edu/courses/cs341/IEEE-754references.html
long double은 80비트와 128비트 두 종류가 있었군요.
추가2:
그리고 메모리에는 2진수로 변환되어 있기 때문에, 지수와 기수를 읽어도 우리가 흔히 사용하는 10진수와는 형태가 다릅니다. 사실상 부호 정도만 인식이 가능하지요. 10진수 일 때의 지수로 변환하는 것도 상당히 골치아픈 문제입니다. -_-;; (수학 라이브러리를 찾아보셔야 할 듯...)
참고로 다음은 FreeBSD의 fpmath.h 파일의 내용을 발췌한 것입니다.
답변 감사드립니다...^^그런데..아무리 해봐도 1.0이 왜 다음
답변 감사드립니다...^^
그런데..아무리 해봐도 1.0이 왜 다음과 같이 나왔는지 모르겠습니다.
0 01111111 00000000000000000000000
1 * e^0 니까....
이렇게 나와야 되지 않나요.. :oops:
0 00000000 00000000000000000000001
부동소숫점..어렵네요..ㅠㅜ
위 문서를 자세히 안읽어보셨군요.exponent는 127이 0입니다.
위 문서를 자세히 안읽어보셨군요.
exponent는 127이 0입니다. 그아래는 음수가 되고 그위로는 양수가 되는거죠. 그리고 fraction은 1부터 2사이의 값을 가지고 각 비트열은 소수점 이하를 2진수로 표현하게됩니다.
답변 감사합니다...조금 감이 잡히는듯하네요...
답변 감사합니다...
조금 감이 잡히는듯하네요...
댓글 달기