M$ 계산기의 BUG?????
글쓴이: 지리즈 / 작성시간: 토, 2005/06/25 - 4:46오후
M$윈도그에 기본으로 포함된 계산기에서
1을 누른 다음 log를 누르면 0이 나옵니다.(정상)
지우고,
10을 누른 다음 log를 누르면 1이 나옵니다.(정상)
그런데 바로 다시 log를 누르면,
-3.9276686539029697101502493382282e-39
이런 숫자가 나옵니다!!!!!
혹시 이유를 아시나요?
ps) linux gcalctool은 정상동작합니다.
Forums:
아무래도 그냥 1을 입력했을때하고10을 log했을때 저장하는 1이 다
아무래도 그냥 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
가 나오는군요..
[quote="kkb110"]아무래도 그냥 1을 입력했을때하고10을
그런데, 동일한 PC에서 리눅스의 gcalctool에서는
정상(=0)이 나옵니다.
보정해주어서 그런걸 까요?
There is no spoon. Neo from the Matrix 1999.
내부구현을 안들여다봐서 모르겠는데요약간더보충설명을 하자면부
내부구현을 안들여다봐서 모르겠는데요
약간더보충설명을 하자면
부동소수점에서는 아시다시피 10을 정확하게 10으로 저장할수가 없죠
2진수를 사용하니까요.. 2,4,8,16등은 정확하게 저장할 수 있고
10같은거는 소수점2진수로 근사하는거구요
일단 MS의 계산기에서는 일반적인 부동소수점을 사용하는 관계로 저런게 나는거같고(다시말하자면 부동소수점을 사용하는 루틴이라고 가정하면 정상적인 출력)
리눅스 계산기의경우 그게 제대로 출력되는데,.. 일단 몇가지그냥 지레짐작을 해보면 (소스보면 걍 알겠지만)
1. 일반적인 수치해석이나 수학툴처럼 저장되는게 부동소수점이 아닌 특화된 클래스여서 10을 정확하게 10으로 저장할가능성도있고
2. 로그 루틴에서 10이나 10000000000같은경우 특별히 분리해서 정확하게 나누어 떨어지게 해둔걸수도있고
3. 그것도아니면 부동소수점 log계산에서 미묘한 구현차이로 인해 생기는 결과.
이 셋중에 하나가 아닐까 싶네요
일반적인 컴퓨터 부동소수점 연산에 비추어본다면 MS계산기는 지극히 정상적인겁니다.
[quote="kkb110"]일반적인 컴퓨터 부동소수점 연산에 비추어본다
저도 그렇게 생각했는데,
리눅스에는 제대로 나와서 좀 흥분했습니다. :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(1
log(log(10) + 1 - 1) = 0 (정상)
log(log(10) - 1 + 1) = -3.9276686539029697101502493382282e-39
There is no spoon. Neo from the Matrix 1999.
[quote="지리즈"][quote="kkb110"]일반적인 컴퓨터 부동
모든 경우에 linux용 matlab에서는 제대로 나옵니다.
python이나 gcalctool에서도 제대로 나오는군요.
어떤 프로그램을 사용하셨는지요?
[quote]log(10) -1 = -9.04379129269696774
MS계산기와 Linux계산기에서 정확하게 동일한 값이 나오네요 ㅋㅋㅋ
저게 64bit float 맞나?? 아무튼 둘다 같은 부동소수점으로 저장하는듯.
그렇다면
3. 그것도아니면 부동소수점 log계산에서 미묘한 구현차이로 인해 생기는 결과.
그냥 이것이겠군요 ㅋㅋ
[quote="azirael"]모든 경우에 linux용 matlab에서는
M$ 계산기입니다.
gcalctool에서는 제대로 나옵니다.
혹시 리눅스 어느 계산기를 사용하셨는지요?
There is no spoon. Neo from the Matrix 1999.
아아 오해였군요 ㅋㅋ[quote="지리즈"][quote="kkb1
아아 오해였군요 ㅋㅋ
지리즈님이 리눅스 계산기로 해봤다는 소리인줄 알았습니다 ^^;;
댓글 달기