Computing2011. 4. 22. 22:42


작년 3월경에 데이터 정밀도를 정리하다가 플래시의 Number데이터형에 대하여 뭔가 이상한 점을 발견했었다. 바로 IEEE-754라는 표준을 따른다고 하는데 정작 최대 53bit를 사용하여 정수를 표현한다는 것이다.
IEEE-754 표준의 경우 배정밀도는 64bit를 사용
한다.

오늘 야꼬랑 채팅 중에 과거 이러한 사실이 문득 떠올랐다. 크게 상관있는 일은 아니지만 11bit의 차이는 생각에 따라서 매우 작지만 매우 크기도 한 값이다.

아래는 ActionScript 3.0 레퍼런스의 내용이다. 지금 플래시를 열어서 F1을 누르고 복사한 내용이다.
Language Version:  ActionScript 3.0
Runtime Versions:  AIR 1.0, Flash Player 9, Flash Lite 4
A data type representing an IEEE-754 double-precision floating-point number. You can manipulate primitive numeric values by using the methods and properties associated with the Number class. This class is identical to the JavaScript Number class.
The properties of the Number class are static, which means you do not need an object to use them, so you do not need to use the constructor.

The Number data type adheres to the double-precision IEEE-754 standard.

The Number data type is useful when you need to use floating-point values. Flash runtimes handle int and uint data types more efficiently than Number, but Number is useful in situations where the range of values required exceeds the valid range of the int and uint data types. The Number class can be used to represent integer values well beyond the valid range of the int and uint data types. The Number data type can use up to 53 bits to represent integer values, compared to the 32 bits available to int and uint. The default value of a variable typed as Number is NaN (Not a Number).

위의 볼딕한 내용은 IEEE-754 배정밀도 표준을 사용한다는 것과 최대 53bit를 사용하여 수를 만든다는 것 이다.


아래는 위키백과의 IEEE-754 표준에 대한 설명이다.
IEEE 754컴퓨터에서 부동소수점를 표현하는 가장 널리 쓰이는 표준이다. ±0 등의 수와 무한, NaN 등의 기호를 표시하는 법과 이러한 수에 대한 연산을 정의하고 있다.

IEEE 754에는 32 비트 단정도(single-precision), 64 비트 배정도(double-precision), 43 비트 이상의 확장단정도(거의 쓰이지 않음), 79 비트 이상의 확장배정도(일반적으로 80비트로 구현됨)에 대한 형식을 정의하고 있다. 이중 32 비트 단정도는 반드시 구현해야 하며, 다른 형식은 선택사항이다. 많은 프로그래밍 언어에서 IEEE 표준을 따르도록 정의하고 있다. 예를 들어 C에서는 float는 단정도, double은 배정도와 대응된다.


왜 11비트의 차이가 있는것일까? IEEE-754의 표준도 수를 만들기 위해서 64비트 중에 11비트를 다른 것에 사용하고 53비트만 사용하는 것일까?

흔히 타언어에서 double형은 64비트 즉 8바이트 배정밀도이며 float은 32비트 즉 4바이트 단정밀도이다.
참고로 예전에 테스트한 Decimal산출식 테스트 : 링크열기


그럼 Number 넌 정체가 머냐?
8바이트 보다 작은...6바이트 보다 좀 큰.... 53비트인거냐? 이것은 불충분한 도움말의 오해인것이다. 실수형의 용량만 표기하고 그외의 용량을 표기하지 않았다. 아래의 리플처럼 1비트는 역시 음수와 양수의 구분에 사용하고 실수 52비트까지 포함하여 53비트라고 표시한 것 같다. 나머지 11비트는 지수를 표현하는 것이다.



야꼬의 리플로 다시 찾아본 결과 위키 영문에서야 정확한 포맷을 찾을 수 있었다.

Basic formats

The standard defines five basic formats, named using their base and the number of bits used to encode them. A conforming implementation must fully implement at least one of the basic formats. There are three binary floating-point basic formats (which can be encoded using 32, 64 or 128 bits) and two decimal floating-point basic formats (which can be encoded using 64 or 128 bits). The binary32 and binary64 formats are the single and double formats of IEEE 754-1985.

The precision of the binary formats is one greater than the width of its significand, because there is an implied (hidden) 1 bit.

Name Common name Base Digits E min E max Notes Decimal
digits
Decimal
E max
binary16 Half precision 2 10+1 −14 +15 storage, not basic 3.31 4.51
binary32 Single precision 2 23+1 −126 +127 7.22 38.23
binary64 Double precision 2 52+1 −1022 +1023 15.95 307.95
binary128 Quadruple precision 2 112+1 −16382 +16383 34.02 4931.77
decimal32 10 7 −95 +96 storage, not basic 7 96
decimal64 10 16 −383 +384 16 384
decimal128 10 34 −6143 +6144 34 6144

Decimal digits is digits × log10 base, this gives the precision in decimal.

Decimal E max is Emax × log10 base, this gives the maximum exponent in decimal.

All the basic formats are available in both hardware and software implementations.


결국 같은 정밀도를 갖는다는 것이다!!! 그런데 역시나 의문이 남는다. 예전의 정밀도 테스트한 결과 차이가 분명하였기 때문이다. C에서 double과 AS3에서의 Number형의 테스트 결과 Number의 정밀도가 떨어졌기 때문이다. 소수점 몇 자리까지인지 기억나질 않지만...이런건 언어의 특성이라고 봐야하는 것일까?

Posted by 버터백통
Unity3D2011. 4. 8. 19:14

 

Unity Web Player | spaceShoot

Posted by 버터백통
이런저런 이야기2011. 3. 31. 21:04

[아시아경제 박현준 기자]김주환 연세대학교 언론홍보영상학부 교수의 허락을 얻어 회복탄력성 지수 측정을 위한 'KRQ-53 테스트'를 공개합니다. 회복탄력성은 '자신에게 닥치는 온갖 역경과 어려움을 오히려 도약의 발판으로 삼는 힘'입니다. 독자 여러분의 회복탄력성은 얼마인가요?

응답 방법: 각 문항에 대해 1에서 5점 사이의 점수를 기록한다.
전혀 그렇지 않다 =1, 그렇지 않다=2, 보통이다=3, 어느 정도 그렇다=4, 매우 그렇다=5

1. 나는 어려운 일이 닥쳤을 때 감정을 통제할 수 있다. ( )
2. 내가 무슨 생각을 하면, 그 생각이 내 기분에 어떤 영향을 미칠지 잘 알아 챈다. ( )
3. 이슈가 되는 문제를 가족이나 친구들과 토론할 때 내 감정을 잘 통제할 수 있다. ( )
4. 집중해야 할 중요한 일이 생기면 신바람이 나기 보다는 더 스트레스를 받는 편이다. ( )
5. 나는 내 감정에 잘 휘말린다. ( )
6. 때때로 내 감정적인 문제 때문에 학교나 집에서 공부하거나 일 할 때 집중하 기 힘들다. ( )
7. 당장 해야 할 일이 있으면 나는 어떠한 유혹이나 방해도 잘 이겨내고 할 일을 한다. ( )
8. 아무리 당황스럽고 어려운 상황이 닥쳐도, 나는 내가 어떤 생각을 하고 있는 지 스스로 잘 안다. ( )
9. 누군가가 나에게 화를 낼 경우 나는 우선 그 사람의 의견을 잘 듣는다. ( )
10. 일이 생각대로 잘 안 풀리면 쉽게 포기하는 편이다. ( )
11. 평소 경제적인 소비나 지출 규모에 대해 별다른 계획 없이 지낸다. ( )
12. 미리 계획을 세우기보다는 즉흥적으로 일을 처리하는 편이다. ( )
13. 문제가 생기면 여러 가지 가능한 해결 방안에 대해 먼저 생각한 후에 해결 하려고 노력한다. ( )
14. 어려운 일이 생기면 그 원인이 무엇인지 신중하게 생각한 후에 그 문제를 해결하려고 노력한다. ( )
15. 나는 대부분의 상황에서 문제의 원인을 잘 알고 있다고 믿는다. ( )
16. 나는 사건이나 상황을 잘 파악하지 못한다는 이야기를 종종 듣는다. ( )
17. 문제가 생기면 나는 성급하게 결론을 내린다는 이야기를 종종 듣는다. ( )
18. 어려운 일이 생기면, 그 원인을 완전히 이해하지 못했다 하더라도 일단 빨리 해결하는 것이 좋다고 생각한다. ( )
19. 나는 분위기나 대화 상대에 따라 대화를 잘 이끌어 갈 수 있다. ( )
20. 나는 재치 있는 농담을 잘 한다. ( )
21. 나는 내가 표현하고자 하는 바에 대한 적절한 문구나 단어를 잘 찾아낸다. ( )
22. 나는 윗사람과 대화하는 것이 부담스럽다. ( )
23. 나는 대화중에 다른 생각을 하느라 대화 내용을 놓칠 때가 종종 있다. ( )
24. 나는 대화를 할 때 하고 싶은 말을 다하지 못 하고 주저할 때가 종종 있다. ( )
25. 사람들의 얼굴표정을 보면 어떤 감정인지 알 수 있다. ( )
26. 슬퍼하거나 화를 내거나 당황하는 사람을 보면 그들이 어떤 생각을 하는지 잘 알 수 있다. ( )
27. 동료가 화를 낼 경우 나는 그 이유를 꽤 잘 아는 편이다. ( )
28. 나는 사람들의 행동방식을 때로 이해하기 힘들다. ( )
29. 친한 친구나 애인 혹은 배우자로부터 "당신은 나를 이해 못해"라는 말을 종 종 듣는다. ( )
30. 동료와 친구들은 내가 자기 말을 잘 듣지 않는다고 한다. ( )
31. 나는 내 주변 사람들로부터 사랑과 관심을 받고 있다. ( )
32. 나는 내 친구들을 정말로 좋아한다. ( )
33. 내 주변 사람들은 내 기분을 잘 이해한다. ( )
34. 서로 도움을 주고받는 친구가 별로 없는 편이다. ( )
35. 나와 정기적으로 만나는 사람들은 대부분 나를 싫어하게 된다. ( )
36. 서로 마음을 터놓고 얘기할 수 있는 친구가 거의 없다. ( )
37. 열심히 일하면 언제나 보답이 있으리라고 생각한다. ( )
38. 맞든 아니든, "아무리 어려운 문제라도 나는 해결할 수 있다"고 일단 믿는 것이 좋다고 생각한다. ( )
39. 어려운 상황이 닥쳐도 나는 모든 일이 다 잘 해결될 거라고 확신한다. ( )
40. 어떤 일을 마치면 주변 사람들이 부정적인 평가를 할까봐 걱정한다. ( )
41. 나에게 일어나는 대부분의 문제들은 나로서는 어쩔 수 없는 상황에 의해 발 생한다고 믿는다. ( )
42. 누가 나의 미래에 대해 물어보면, 성공한 나의 모습을 상상하기 힘들다. ( )
43. 내 삶은 내가 생각하는 이상적인 삶에 가깝다. ( )
44. 내 인생의 여러 가지 조건들은 만족스럽다. ( )
45. 나는 내 삶에 만족한다. ( )
46. 나는 내 삶에서 중요하다고 생각한 것들은 다 갖고 있다. ( )
47. 나는 다시 태어나도 나의 현재 삶을 다시 살고 싶다. ( )
48. 나는 다양한 종류의 많은 사람들에게 고마움을 느낀다. ( )
49. 내가 고맙게 여기는 것들을 모두 적는다면, 아주 긴 목록이 될 것이다. ( )
50. 나이가 들어갈수록 내 삶의 일부가 된 사람, 사건, 생활에 감사하는 마음이 더 커져간다. ( )
51. 나는 감사해야 할 것이 별로 없다. ( )
52. 세상을 둘러볼 때, 내가 고마워 할 것은 별로 없다. ( )
53. 사람이나 일에 대한 고마움을 한참 시간이 지난 후에야 겨우 느낀다. ( )

< 채점 및 점수 해석 방법 >

4, 5, 6, 10, 11, 12, 16, 17, 18, 22, 23, 24, 28, 29, 30, 34, 35, 36, 40, 41, 42, 51, 52, 53번 문항은 6에서 자신의 점수를 뺀 것을 점수로 계산한다. 예컨대 1이라고 적었으면 5점, 3은 3점, 5는 1점.

◆ 자기조절능력 = 감정조절력 + 충동통제력 + 원인분석력
1번부터 6번 문항까지의 점수의 합은 당신의 감정조절력을, 7번부터 12번 문항은 충동통제력을, 그리고 13번부터 18번까지의 문항은 원인분석력을 나타낸다. 그리고 이 셋을 합한 점수가 당신의 자기조절능력 점수다. 우리나라 성인들의 자기조절능력의 평균 점수는 63.5점이다. 만약 당신의 점수가 63점 이하라면 자기조절능력을 높이기 위해 노력하는 것이 좋다. 만약 55점 이하라면 자기조절능력을 향상시키기 위해 반드시 노력해야 한다. 하위 20%에 해당하기 때문이다. 70점 이상이 나왔다면 당신의 자기조절능력에는 별문제가 없다고 봐도 좋으며, 75점 이상이라면 아주 높은 편(상위 7% 이내)이니 자부심을 가져도 좋다.

◆ 대인관계능력 = 소통능력 + 공감능력 + 자아확장력
19번부터 24번까지는 소통능력, 25번부터 30번까지는 공감능력, 31번부터 36번까지는 자아확장력의 점수를 각각 나타낸다. 그리고 이 셋의 점수를 합친 것이 당신의 대인관계능력 점수다. 우리나라 사람들의 대인관계능력의 평균 점수는 67.8점이다. 만약 당신의 점수가 67점 이하라면 대인관계능력을 높이기 위해 노력하는 것이 좋다. 62점 이하라면 대인관계능력을 높이기 위해 반드시 노력해야 한다. 하위 20%에 해당하기 때문이다. 이렇게 점수가 낮은 사람들은 조금만 노력해도 스스로 그 효과를 금방 느낄 수 있다. 만약 대인관계능력의 점수가 74점 이상이 나왔다면 당신의 대인관계능력에는 별문제가 없다고 봐도 좋으며, 80점 이상이라면 당신은 대인관계와 사회성이 아주 뛰어난 편(상위 6% 이내)이라할 수 있다.

◆ 긍정성 =자아낙관성 + 생활만족도 + 감사하기
긍정성은 자기 스스로의 장점과 강점을 낙관적으로 바라보는 태도 (37번 - 42번), 행복의 기본수준이라 할 수 있는 삶에 대한 만족도 (43번-47번), 그리고 삶과 주변 사람에 대해 감사하는 태도 (48번-53번)으로 측정된다. 우리나라 사람들의 긍정성의 평균 점수는 63.4점이다. 만약 당신의 점수가 63점 이하라면 긍정성을 높이기 위해 노력하는 것이 좋다. 56점 이하라면 긍정성을 높이기 위해 반드시 노력해야 한다. 하위 20%에 해당하기 때문이다. 만약 긍정성의 점수가 70점 이상이 나왔다면 당신의 긍정성에는 별문제가 없다고 봐도 좋으며, 75점 이상이라면 당신은 대단히 긍정성이 높은 사람(상위 6% 이내)이니 자부심을 가져도 좋다.

이상 자기조절능력, 대인관계능력, 긍정성의 세가지 점수의 총합이 당신의 회복탄력성 지수다.

우리나라 사람들의 평균점수는 195점이다. 만약 당신의 점수가 190이하라면 회복탄력성을 높이기 위해 노력하는 것이 좋다. 180점 이하라면 당신은 자그마한 부정적인 사건에도 쉽게 영향 받는 나약한 존재다. 당신은 되튀어오를 힘을 빨리 길러야 한다. 170점 이하라면 당신은 깨지기 쉬운 유리 같은 존재라 할 수 있다. 크고 작은 자그마한 불행에도 쉽게 상처를 입게 되며 그 상처는 쉽게 치유되지 않을 것이다. 하루하루를 살얼음 위를 걷는 기분으로 살아온 당신은 지금 당장 회복탄력성을 높이기 위해 온 힘을 기울어야 한다.

만약 당신의 점수가 200점을 넘는다면 일단 안심이다. 그러나 212점 정도는 돼야 상위 20%에 들 수 있다. 220점을 넘는다면 당신은 대단히 회복탄력성이 높은 사람이다. 웬만한 불행한 사건은 당신을 흔들어 놓지 못한다. 오히려 역경은 당신을 더 높은 곳으로 올려놓기 위한 스프링보드이니 즐겁게 받아들일 일이다.

출처:김주환, 회복탄력성, 위즈덤 하우스, 1만3000원
Posted by 버터백통