M$ 계산기의 BUG?????

지리즈의 이미지

M$윈도그에 기본으로 포함된 계산기에서
1을 누른 다음 log를 누르면 0이 나옵니다.(정상)

지우고,
10을 누른 다음 log를 누르면 1이 나옵니다.(정상)
그런데 바로 다시 log를 누르면,
-3.9276686539029697101502493382282e-39
이런 숫자가 나옵니다!!!!!

혹시 이유를 아시나요?

ps) linux gcalctool은 정상동작합니다.

kkb110의 이미지

아무래도 그냥 1을 입력했을때하고
10을 log했을때 저장하는 1이 다른것 같습니다.
부동소수점오차 비슷한 개념으로.. 그런쪽으로 생각이 되네요.
그러니까 정리하자면.. log루틴이 10에대해서 약간 부정확한 결과값을 산출한다는거죠.
출력되는건 1이지만 부동소수점 저장된건 1쳤을때 1이 아니라는 그런..

이것을 보면 더욱 명확해지네요

10을 log해서 나온 1을 log하면
-3.9276686539029697101502493382282e-39
지만

10000000000을 log해서나온 10을 log해서나온 1을 log하면
-1.6311897916037854168646374024348e-39
가 나오는군요..

지리즈의 이미지

kkb110 wrote:
아무래도 그냥 1을 입력했을때하고
10을 log했을때 저장하는 1이 다른것 같습니다.
부동소수점오차 비슷한 개념으로.. 그런쪽으로 생각이 되네요.
그러니까 정리하자면.. log루틴이 10에대해서 약간 부정확한 결과값을 산출한다는거죠.
출력되는건 1이지만 부동소수점 저장된건 1쳤을때 1이 아니라는 그런..

그런데, 동일한 PC에서 리눅스의 gcalctool에서는
정상(=0)이 나옵니다.

보정해주어서 그런걸 까요?

There is no spoon. Neo from the Matrix 1999.

kkb110의 이미지

내부구현을 안들여다봐서 모르겠는데요

약간더보충설명을 하자면

부동소수점에서는 아시다시피 10을 정확하게 10으로 저장할수가 없죠
2진수를 사용하니까요.. 2,4,8,16등은 정확하게 저장할 수 있고
10같은거는 소수점2진수로 근사하는거구요

일단 MS의 계산기에서는 일반적인 부동소수점을 사용하는 관계로 저런게 나는거같고(다시말하자면 부동소수점을 사용하는 루틴이라고 가정하면 정상적인 출력)

리눅스 계산기의경우 그게 제대로 출력되는데,.. 일단 몇가지그냥 지레짐작을 해보면 (소스보면 걍 알겠지만)

1. 일반적인 수치해석이나 수학툴처럼 저장되는게 부동소수점이 아닌 특화된 클래스여서 10을 정확하게 10으로 저장할가능성도있고

2. 로그 루틴에서 10이나 10000000000같은경우 특별히 분리해서 정확하게 나누어 떨어지게 해둔걸수도있고

3. 그것도아니면 부동소수점 log계산에서 미묘한 구현차이로 인해 생기는 결과.

이 셋중에 하나가 아닐까 싶네요

일반적인 컴퓨터 부동소수점 연산에 비추어본다면 MS계산기는 지극히 정상적인겁니다.

지리즈의 이미지

kkb110 wrote:
일반적인 컴퓨터 부동소수점 연산에 비추어본다면 MS계산기는 지극히 정상적인겁니다.

저도 그렇게 생각했는데,
리눅스에는 제대로 나와서 좀 흥분했습니다. :oops:

그런데 재미있는것은

log(10) +1 = 2(정상)
log(10) *10 = 10(정상)
log(10) /10 = 0.1(정상)
log(10) -1 = -9.0437912926969677427845264740465e-39

이렇게 나옵니다.

There is no spoon. Neo from the Matrix 1999.

지리즈의 이미지

log(log(10) + 1 - 1) = 0 (정상)
log(log(10) - 1 + 1) = -3.9276686539029697101502493382282e-39

There is no spoon. Neo from the Matrix 1999.

azirael의 이미지

지리즈 wrote:
kkb110 wrote:
일반적인 컴퓨터 부동소수점 연산에 비추어본다면 MS계산기는 지극히 정상적인겁니다.

저도 그렇게 생각했는데,
리눅스에는 제대로 나와서 좀 흥분했습니다. :oops:

그런데 재미있는것은

log(10) +1 = 2(정상)
log(10) *10 = 10(정상)
log(10) /10 = 0.1(정상)
log(10) -1 = -9.0437912926969677427845264740465e-39

이렇게 나옵니다.

모든 경우에 linux용 matlab에서는 제대로 나옵니다.
python이나 gcalctool에서도 제대로 나오는군요.
어떤 프로그램을 사용하셨는지요?

kkb110의 이미지

Quote:
log(10) -1 = -9.0437912926969677427845264740465e-39

MS계산기와 Linux계산기에서 정확하게 동일한 값이 나오네요 ㅋㅋㅋ
저게 64bit float 맞나?? 아무튼 둘다 같은 부동소수점으로 저장하는듯.

그렇다면

3. 그것도아니면 부동소수점 log계산에서 미묘한 구현차이로 인해 생기는 결과.

그냥 이것이겠군요 ㅋㅋ

지리즈의 이미지

azirael wrote:
모든 경우에 linux용 matlab에서는 제대로 나옵니다.
python이나 gcalctool에서도 제대로 나오는군요.
어떤 프로그램을 사용하셨는지요?

M$ 계산기입니다.

kkb110 wrote:
Quote:
log(10) -1 = -9.0437912926969677427845264740465e-39

MS계산기와 Linux계산기에서 정확하게 동일한 값이 나오네요 ㅋㅋㅋ
저게 64bit float 맞나?? 아무튼 둘다 같은 부동소수점으로 저장하는듯.

그렇다면

3. 그것도아니면 부동소수점 log계산에서 미묘한 구현차이로 인해 생기는 결과.

그냥 이것이겠군요 ㅋㅋ

gcalctool에서는 제대로 나옵니다.

혹시 리눅스 어느 계산기를 사용하셨는지요?

There is no spoon. Neo from the Matrix 1999.

kkb110의 이미지

아아 오해였군요 ㅋㅋ

지리즈 wrote:
kkb110 wrote:
일반적인 컴퓨터 부동소수점 연산에 비추어본다면 MS계산기는 지극히 정상적인겁니다.

저도 그렇게 생각했는데,
리눅스에는 제대로 나와서 좀 흥분했습니다. :oops:

그런데 재미있는것은

log(10) +1 = 2(정상)
log(10) *10 = 10(정상)
log(10) /10 = 0.1(정상)
log(10) -1 = -9.0437912926969677427845264740465e-39

이렇게 나옵니다.

지리즈님이 리눅스 계산기로 해봤다는 소리인줄 알았습니다 ^^;;

댓글 달기

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