0.000000 <= 0.0 : false?

나그네나그네의 이미지

제목 그대로입니다.

printf해보면 0.000000으로 뜨는데,
0.000000 <= 0.0 하니까 false가 뜨네요.

비슷한 현상 겪으신 분 계시는가요?

토끼아빠의 이미지

당연한거 아닌가요?

좋은 하루 되세요!!

klara의 이미지

실수는 지수형식으로 표현되기때문에 비교연산이 부정확한 경우가 있습니다.

ipoemi의 이미지

Floating Point에서 정확한 비교가 불가능하다고 알고 있는데요...
그래서 오차 범위를 지정해서 비교해야 한다고 알고 있습니다.

깊이 알고 싶으시다면... 뭘 봐야할까요...? ㅡㅡ??

나그네나그네의 이미지

부동소수점 값이 메모리에 저장될 때 어떤 꼴로 저장되는지에 대한 정보만 조금 얻어볼 수 있다면 이해라도 갈 텐데 말이죠 :) 가령 int라면 aa aa aa aa라던지..
----------------
agidari.wordpress.com

peecky의 이미지

sizeof(float) == sizeof(void *) 라는 가장하에

 union {
    float f;
    void *p; 
} float_hex;
float_hex.f = 0.00000001;
printf("%p\n", float_hex.p);
kaeri17의 이미지

jick의 이미지

0.0000001을 %.6f하면 0.000000이라고 나오겠죠. 혹시 %e 혹은 %g로 찍어보셨나요?

Lein의 이미지

Quote:
실수는 지수형식으로 표현되기때문에 ...

그래서 실제로 완전한 0이 존재하질 않는다고 알고 있습니다

peecky의 이미지

0, 1, 0.5(0.1(2)), 0.25(0.01(2)) 등 2진수 유한 소수로 표현 가능한 숫자는 정확히 저장할 수 있습니다.
(물론 저장 단위가 유한한만큼 유효숫자 자리수와 지수의 크기의 제한은 있습니다)

Lein의 이미지

물론 당연합니다만...

제가 예전에 공부했던 바로는...

Quote:

±(1.m)*2^(e^-127)

이런 방식으로 실수를 표현합니다. 그래서 2^n승 꼴이므로 완전한 0은 절대 있을 수 없다는 얘기지요.

jick의 이미지

이러한 표현 형태가 일반적이지만 이게 전부가 아닙니다, 0, infinity, 에러 조건을 나타내기 위한 특수 포맷이 따로 있습니다.

모든 bit가 0이면 +0.0, sign bit만 1이면 -0.0을 나타냅니다. 0이 +- 두 개가 있으니 수학의 0과는 좀 다릅니다만, 이건 예를 들자면 1/+infinity = +0, 1/-infinity = -0 같은 식으로 쓰이는 거죠.

http://en.wikipedia.org/wiki/IEEE_floating-point_standard

Lein의 이미지

감사합니다.. 덕분에 좋은 공부가 되었군요 :)

익명 사용자의 이미지

실수를 비교할 때에는
어느 정도 적당히 작은 수 입실론을 상수로 정의해서
그 오차영역 이내인지 아닌지를 가지고 동일성을 판단하십시오.

inline int real_equal(const double d1, const double d2)
{
double eps = 0.00000000001; // 적당히 작은 수.
double d = d1 - d2;
if ( -eps < d && d < eps ) return 1;
return 0;
}

음... 제가 산수에 약해서... 이거 맞는 코드인가요? -_-;
하여간 이런식으로 하면 됩니다.

댓글 달기

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