봤는데요..
c의 float나 double 바이너리로 저장한 파일
실제 열고 보면
저 설명하고 전혀 딴판입니다 -_-;
전혀 다르게 저장되 있어요..
가령 설명대로라면 앞부터 10101 이렇게 시작되야 하는데,
실지보면 00000 으로 시작하고 맨끝에 숫자가 다 모여 있음
가령 설명대로라면 앞부터 10101 이렇게 시작되야 하는데,
실지보면 00000 으로 시작하고 맨끝에 숫자가 다 모여 있음
zerofill 때문이 아닌가요?
테이블을 생성할때 aa int(10) unsigned zerofill not null default '0000000000'이라고 하고 실제 11을 넣어보면
aa 의 필드에는 -> 0000000011 이라고 들어갑니다. 즉 0으로 나머지 공백을 채운다는거죠.
봤는데요..
c의 float나 double 바이너리로 저장한 파일
실제 열고 보면
저 설명하고 전혀 딴판입니다 -_-;
전혀 다르게 저장되 있어요..
가령 설명대로라면 앞부터 10101 이렇게 시작되야 하는데,
실지보면 00000 으로 시작하고 맨끝에 숫자가 다 모여 있음
근데 일반적으로 검색해보거나
책같은데 봐도 실수저장은 저런식으로 한다고 써있잖아요.
근데 실지보면 저거와 틀립니다 -_-;
저거 믿고 바이너리로 열어 봤다간 당황합니다.
가령 저기엔 양수는 1 음수는 0 으로 시작한다고 적혀있는데.
실제로 열어보면 그 반대로 저장되어 있더군요 양수가0 음수가1 로 시작해서 당황 -_-;
근데 일반적으로 검색해보거나
책같은데 봐도 실수저장은 저런식으로 한다고 써있잖아요.
근데 실지보면 저거와 틀립니다 -_-;
저거 믿고 바이너리로 열어 봤다간 당황합니다.
가령 저기엔 양수는 1 음수는 0 으로 시작한다고 적혀있는데.
실제로 열어보면 그 반대로 저장되어 있더군요 양수가0 음수가1 로 시작해서 당황 -_-;
그리고 음수의 저장방식도 컴퓨터 언어마다 좀 틀리네요.
인용된 자료가 설명이 친절한 편은 아닙니다만, 틀린 내용을 포함하고
있지는 않습니다.
floating-point number 라는 동일한 개념을 사용해 실수(에 대한 근사값)을
표현할지라도, irondog 님이 말씀하셨듯이 사용하는 표준(혹은 기준)에
따라 내부 표현은 다를 수 있습니다.
하지만, radix, exponent 의 범위, hidden bit 의 사용 여부 등은 차이를
보일 수 있지만, sign bit 를 통해 음수/양수를 가르는 방법은 사실상 거의
동일한 방법을 사용합니다. 자료에서도 분명 "음수는 sign bit 를 1 로
한다"고 설명되어 있습니다.
Quote:
The value of -0.375 (decimal) = -0.011 (binary) or -0.11 × 2^1
... In floating-point notation, the number would start with a 1 for
the sign bit, ...
근데 일반적으로 검색해보거나
책같은데 봐도 실수저장은 저런식으로 한다고 써있잖아요.
근데 실지보면 저거와 틀립니다 -_-;
저거 믿고 바이너리로 열어 봤다간 당황합니다.
가령 저기엔 양수는 1 음수는 0 으로 시작한다고 적혀있는데.
실제로 열어보면 그 반대로 저장되어 있더군요 양수가0 음수가1 로 시작해서 당황 -_-;
그리고 음수의 저장방식도 컴퓨터 언어마다 좀 틀리네요.
인용된 자료가 설명이 친절한 편은 아닙니다만, 틀린 내용을 포함하고
있지는 않습니다.
floating-point number 라는 동일한 개념을 사용해 실수(에 대한 근사값)을
표현할지라도, irondog 님이 말씀하셨듯이 사용하는 표준(혹은 기준)에
따라 내부 표현은 다를 수 있습니다.
하지만, radix, exponent 의 범위, hidden bit 의 사용 여부 등은 차이를
보일 수 있지만, sign bit 를 통해 음수/양수를 가르는 방법은 사실상 거의
동일한 방법을 사용합니다. 자료에서도 분명 "음수는 sign bit 를 1 로
한다"고 설명되어 있습니다.
Quote:
The value of -0.375 (decimal) = -0.011 (binary) or -0.11 × 2^1
... In floating-point notation, the number would start with a 1 for
the sign bit, ...
제가 파라독스 DB 에 대해서는 자세히 알지 못합니다만 (혹시 DB 이름이
"파라독스"라서 그런거일까요? ;-), 만약 양수/음수의 sign bit 를 반대로
encoding 한다면 혹시라도 lexicographic order 를 위함이 아닐까
생각합니다.
즉, fp number 를 big-endian 으로 저장할 경우,
[sign][exponent][significand]
와 같은 순서가 됩니다. 따라서 sign bit 를 양수일 경우 1로, 음수일 경우
0으로 설정할 경우, 두 fp number 의 대소 비교를 별다른 조작 없이 bit
단위(실제로는 byte 나 word 단위)로 할 수 있게 됩니다 (물론, signed
zero 를 지원할 경우 IEEE 754 의 정의와는 달리 -0 < +0 이 되는 문제가
발생합니다만...). 참고로, IEEE 754 에서 0 의 표현을 위해 exponent 에
최소값을 사용하는 이유도 동일합니다.
같은 실수형이라고 하더라도 어떤 표준을 따르냐에 따라 표현 방식이 틀리죠
같은 실수형이라고 하더라도 어떤 표준을 따르냐에 따라 표현 방식이 틀리죠.
http://en.wikipedia.org/wiki/Floating-point_number를 참조해 보세요.
[quote="irondog"]같은 실수형이라고 하더라도 어떤 표준을 따
봤는데요..
c의 float나 double 바이너리로 저장한 파일
실제 열고 보면
저 설명하고 전혀 딴판입니다 -_-;
전혀 다르게 저장되 있어요..
가령 설명대로라면 앞부터 10101 이렇게 시작되야 하는데,
실지보면 00000 으로 시작하고 맨끝에 숫자가 다 모여 있음
[quote]가령 설명대로라면 앞부터 10101 이렇게 시작되야 하는데,
zerofill 때문이 아닌가요?
테이블을 생성할때 aa int(10) unsigned zerofill not null default '0000000000'이라고 하고 실제 11을 넣어보면
aa 의 필드에는 -> 0000000011 이라고 들어갑니다. 즉 0으로 나머지 공백을 채운다는거죠.
새해 복 많이 받으세요.
[quote="wslee"][quote="irondog"]같은 실수형이라
byte order (endian) 를 감안하시기 바랍니다.
--
Jun, Woong (woong at gmail.com)
http://www.woong.org
아하~! 그런게 또 있었군요.엔디엔 검색 해보니빅엔디안 리틀엔디안
아하~! 그런게 또 있었군요.
엔디엔 검색 해보니
빅엔디안 리틀엔디안 있고.
인텔은 리틀엔디안이라고 거꾸로 저장되는거였군요.
파라독스 db는 빅엔디안 이었습니다.
이제 의문사항 상황종료
감사합니다.
[quote="wslee"]아하~! 그런게 또 있었군요.엔디엔 검색
이야~ 한번에 두가지를 배우시는군요. 놀랍습니다.
열을 가르쳐도 하나를 기억 못 하는 인간들 때문에 골치인데...
대단하십니다. ㅎㅎㅎ
[quote="irondog"][quote="wslee"]아하~! 그런게
제가 그래요. 오하하 ;
----------------------------
May the F/OSS be with you..
[quote="hey"][quote="irondog"][quote="ws
[quote="irondog"]같은 실수형이라고 하더라도 어떤 표준을 따
근데 일반적으로 검색해보거나
책같은데 봐도 실수저장은 저런식으로 한다고 써있잖아요.
근데 실지보면 저거와 틀립니다 -_-;
저거 믿고 바이너리로 열어 봤다간 당황합니다.
가령 저기엔 양수는 1 음수는 0 으로 시작한다고 적혀있는데.
실제로 열어보면 그 반대로 저장되어 있더군요 양수가0 음수가1 로 시작해서 당황 -_-;
그리고 음수의 저장방식도 컴퓨터 언어마다 좀 틀리네요.
[quote="wslee"][quote="irondog"]같은 실수형이라
인용된 자료가 설명이 친절한 편은 아닙니다만, 틀린 내용을 포함하고
있지는 않습니다.
floating-point number 라는 동일한 개념을 사용해 실수(에 대한 근사값)을
표현할지라도, irondog 님이 말씀하셨듯이 사용하는 표준(혹은 기준)에
따라 내부 표현은 다를 수 있습니다.
하지만, radix, exponent 의 범위, hidden bit 의 사용 여부 등은 차이를
보일 수 있지만, sign bit 를 통해 음수/양수를 가르는 방법은 사실상 거의
동일한 방법을 사용합니다. 자료에서도 분명 "음수는 sign bit 를 1 로
한다"고 설명되어 있습니다.
아마도 다른 부분을 보고 오해하신 것이 아닌가 싶습니다.
--
Jun, Woong (woong at gmail.com)
http://www.woong.org
[quote="전웅"][quote="wslee"][quote="irond
앗~!
제컴퓨터가 웹페이지의
- 표시가 다 ㅁ으로 나와버리는
심각한 결함이 -_-;
근데 파라독스 db는
1이 양수고 0이 음수로 반대로 되어 있더라구요.
[quote="wslee"]제컴퓨터가 웹페이지의 - 표시가 다 ㅁ으로
;-)
제가 파라독스 DB 에 대해서는 자세히 알지 못합니다만 (혹시 DB 이름이
"파라독스"라서 그런거일까요? ;-), 만약 양수/음수의 sign bit 를 반대로
encoding 한다면 혹시라도 lexicographic order 를 위함이 아닐까
생각합니다.
즉, fp number 를 big-endian 으로 저장할 경우,
[sign][exponent][significand]
와 같은 순서가 됩니다. 따라서 sign bit 를 양수일 경우 1로, 음수일 경우
0으로 설정할 경우, 두 fp number 의 대소 비교를 별다른 조작 없이 bit
단위(실제로는 byte 나 word 단위)로 할 수 있게 됩니다 (물론, signed
zero 를 지원할 경우 IEEE 754 의 정의와는 달리 -0 < +0 이 되는 문제가
발생합니다만...). 참고로, IEEE 754 에서 0 의 표현을 위해 exponent 에
최소값을 사용하는 이유도 동일합니다.
물론 이는 추측일 뿐입니다. 속사정은 파라독스 개발자만이 알고 있겠지요.
그럼...
--
Jun, Woong (woong at gmail.com)
http://www.woong.org
댓글 달기