데이터베이스의 number형 변수는 c의 double 와 틀린가요??

wslee의 이미지

파라독스 db 파일의 number 형 변수가
8바이트 실수형이라고 해서

c의 더블과 같을것 같아
읽어봤더니..

왜 다른 숫자가 나오죠 -_-;;

irondog의 이미지

같은 실수형이라고 하더라도 어떤 표준을 따르냐에 따라 표현 방식이 틀리죠.
http://en.wikipedia.org/wiki/Floating-point_number를 참조해 보세요.

wslee의 이미지

irondog wrote:
같은 실수형이라고 하더라도 어떤 표준을 따르냐에 따라 표현 방식이 틀리죠.
http://en.wikipedia.org/wiki/Floating-point_number를 참조해 보세요.

봤는데요..
c의 float나 double 바이너리로 저장한 파일
실제 열고 보면
저 설명하고 전혀 딴판입니다 -_-;
전혀 다르게 저장되 있어요..
가령 설명대로라면 앞부터 10101 이렇게 시작되야 하는데,
실지보면 00000 으로 시작하고 맨끝에 숫자가 다 모여 있음

freegagamel의 이미지

Quote:
가령 설명대로라면 앞부터 10101 이렇게 시작되야 하는데,
실지보면 00000 으로 시작하고 맨끝에 숫자가 다 모여 있음

zerofill 때문이 아닌가요?
테이블을 생성할때 aa int(10) unsigned zerofill not null default '0000000000'이라고 하고 실제 11을 넣어보면
aa 의 필드에는 -> 0000000011 이라고 들어갑니다. 즉 0으로 나머지 공백을 채운다는거죠.

새해 복 많이 받으세요.

전웅의 이미지

wslee wrote:
irondog wrote:
같은 실수형이라고 하더라도 어떤 표준을 따르냐에 따라 표현 방식이 틀리죠.
http://en.wikipedia.org/wiki/Floating-point_number를 참조해 보세요.

봤는데요..
c의 float나 double 바이너리로 저장한 파일
실제 열고 보면
저 설명하고 전혀 딴판입니다 -_-;
전혀 다르게 저장되 있어요..
가령 설명대로라면 앞부터 10101 이렇게 시작되야 하는데,
실지보면 00000 으로 시작하고 맨끝에 숫자가 다 모여 있음

byte order (endian) 를 감안하시기 바랍니다.

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

wslee의 이미지

아하~! 그런게 또 있었군요.
엔디엔 검색 해보니
빅엔디안 리틀엔디안 있고.
인텔은 리틀엔디안이라고 거꾸로 저장되는거였군요.
파라독스 db는 빅엔디안 이었습니다.

이제 의문사항 상황종료

감사합니다.

irondog의 이미지

wslee wrote:
아하~! 그런게 또 있었군요.
엔디엔 검색 해보니
빅엔디안 리틀엔디안 있고.
인텔은 리틀엔디안이라고 거꾸로 저장되는거였군요.
파라독스 db는 빅엔디안 이었습니다.

이제 의문사항 상황종료

감사합니다.


이야~ 한번에 두가지를 배우시는군요. 놀랍습니다.
열을 가르쳐도 하나를 기억 못 하는 인간들 때문에 골치인데...
대단하십니다. ㅎㅎㅎ

hey의 이미지

irondog wrote:
wslee wrote:
아하~! 그런게 또 있었군요.
엔디엔 검색 해보니
빅엔디안 리틀엔디안 있고.
인텔은 리틀엔디안이라고 거꾸로 저장되는거였군요.
파라독스 db는 빅엔디안 이었습니다.

이제 의문사항 상황종료

감사합니다.


이야~ 한번에 두가지를 배우시는군요. 놀랍습니다.
열을 가르쳐도 하나를 기억 못 하는 인간들 때문에 골치인데...
대단하십니다. ㅎㅎㅎ

제가 그래요. 오하하 ;


----------------------------
May the F/OSS be with you..


나는오리의 이미지

hey wrote:
irondog wrote:
wslee wrote:
아하~! 그런게 또 있었군요.
엔디엔 검색 해보니
빅엔디안 리틀엔디안 있고.
인텔은 리틀엔디안이라고 거꾸로 저장되는거였군요.
파라독스 db는 빅엔디안 이었습니다.

이제 의문사항 상황종료

감사합니다.


이야~ 한번에 두가지를 배우시는군요. 놀랍습니다.
열을 가르쳐도 하나를 기억 못 하는 인간들 때문에 골치인데...
대단하십니다. ㅎㅎㅎ

제가 그래요. 오하하 ;
동지가 있어 그나마 위안이 됩니다.
wslee의 이미지

irondog wrote:
같은 실수형이라고 하더라도 어떤 표준을 따르냐에 따라 표현 방식이 틀리죠.
http://en.wikipedia.org/wiki/Floating-point_number를 참조해 보세요.

근데 일반적으로 검색해보거나
책같은데 봐도 실수저장은 저런식으로 한다고 써있잖아요.
근데 실지보면 저거와 틀립니다 -_-;
저거 믿고 바이너리로 열어 봤다간 당황합니다.
가령 저기엔 양수는 1 음수는 0 으로 시작한다고 적혀있는데.
실제로 열어보면 그 반대로 저장되어 있더군요 양수가0 음수가1 로 시작해서 당황 -_-;

그리고 음수의 저장방식도 컴퓨터 언어마다 좀 틀리네요.

전웅의 이미지

wslee wrote:
irondog wrote:
같은 실수형이라고 하더라도 어떤 표준을 따르냐에 따라 표현 방식이 틀리죠.
http://en.wikipedia.org/wiki/Floating-point_number를 참조해 보세요.

근데 일반적으로 검색해보거나
책같은데 봐도 실수저장은 저런식으로 한다고 써있잖아요.
근데 실지보면 저거와 틀립니다 -_-;
저거 믿고 바이너리로 열어 봤다간 당황합니다.
가령 저기엔 양수는 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, ...

아마도 다른 부분을 보고 오해하신 것이 아닌가 싶습니다.

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

wslee의 이미지

전웅 wrote:
wslee wrote:
irondog wrote:
같은 실수형이라고 하더라도 어떤 표준을 따르냐에 따라 표현 방식이 틀리죠.
http://en.wikipedia.org/wiki/Floating-point_number를 참조해 보세요.

근데 일반적으로 검색해보거나
책같은데 봐도 실수저장은 저런식으로 한다고 써있잖아요.
근데 실지보면 저거와 틀립니다 -_-;
저거 믿고 바이너리로 열어 봤다간 당황합니다.
가령 저기엔 양수는 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는
1이 양수고 0이 음수로 반대로 되어 있더라구요.

전웅의 이미지

wslee wrote:
제컴퓨터가 웹페이지의
- 표시가 다 ㅁ으로 나와버리는
심각한 결함이 -_-;

;-)

wslee wrote:
근데 파라독스 db는
1이 양수고 0이 음수로 반대로 되어 있더라구요.

제가 파라독스 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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.