부동 소수점과 고정 소수점의 차이를 알려주세요

geneven의 이미지

요즘에 컴퓨터구조 수업을 듣고 있는데 부동 소수점과 고정 소수점에 대해
설명을 하네요. 근데 약간 한눈팔았더니 내용을 하나도 모르겠습니다.

두 단어의 의미로 봐선 부동 = 움직이지 않는다 = 고정인거 같은데 이렇게 해서는 이해가 안되네요.

요즘엔 한글 번역서를 보면서 오히려 원서보다 이해가 안된다는 것을 이상하게
생각하고 있습니다. 여러분도 그러신지?

맹고이의 이미지

floating point... '부동'은 떠다니는 浮動 일겁니다. ^^;

fibonacci의 이미지

a X 10 ^ K

처럼, 가수와 지수로 나타내는 표현을 부동소수점 표현이라 합니다.

지수의 크기에 따라 가수의 소수점이 표현하는 자릿수가 일정치 않으므로, 떠다니는(부동) 소수점 표현이라 하는 것 같네요..

No Pain, No Gain.

windy96의 이미지

제가 최근에 했던 일과 관련되어서... 좋은 링크 하나 알려드리죠.
문서 가만가만 따라가보시면.. 어렵지 않게 익힐 수 있을 겁니다.

http://www.arm.com/support/567GAM/$File/DAI0033A_fixedpoint.pdf

요는... 부동 소수점은 그야말로 floating point라는 거죠. fixed point를 하면 floating point를 유지하기 위한 overhead가 줄어들므로 precision을 좀 희생하면서 좀더 빠른 계산을 할 수 있다는 것이고...
그래서 arm과 같은 프로세서에서는 유용하게 사용할 수 있다는 거죠.

floating point에 대해서도 arm에 좋은 문서가 있습니다.

http://www.arm.com/support/567KW7/$File/DAI0055A_fp-performance.pdf

fp는 대개 IEEE 표준을 따라서 구현되므로 어딜 가나 같습니다.

ihavnoid의 이미지

위에 많은 분들이 써 주신 대로,

부동소수점은 말그대로 소숫점이 떠다닌다는 얘기입니다.
(floating point)

고정소수점은 소숫점이 고정되어 있다는 얘기입니다.
(fixed point)

즉, floating point는 값과 함께 소숫점의 위치까지 기록을 하고 있지만,
fixed point는 값 자체만 기록을 하고 있습니다.

뭐 정확한 예는 아니지만, 대충 이런식으로 작동을 합니다.

(지금 얘기하는 방법은 절!대!로!! 표준이 아닙니다)

예를 들어, 0x8000 8000 0000 0000 이라는 64비트 숫자가 있다고 칩시다.
그리고, 앞에 16비트는 지수, 뒤에 48비트는 base라고 합시다.

그리고, 지수 숫자는 0x8000을 기준선으로 잡는다고 생각합시다.

그러면, 이 값의 소수값은

1.8000 0000 0000 * 2^(0x8000 - 0x8000) = 1.5

즉, 64비트 aaaa bbbb bbbb bbbb

1.bbbb bbbb bbbb * 2^(0xaaaa - 0x8000) = (계산해 보세요-_-)

뭐 이런 식으로 표현하는 숫자가 floating point 입니다.

반대로 fixed point는

0xaaaa bbbb cccc dddd 라는 64비트를

aaaa bbbb . cccc dddd

이런식으로 표현하는 것이죠.

예를 들어, 32.75는

0x0000 0020 c000 0000

이 될 것입니다. 계산해 보세요.

Consider the ravens: for they neither sow nor reap; which neither have storehouse nor barn; and God feedeth them: how much more are ye better than the fowls?
Luke 12:24

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.