2011년3월29일...실수(real number), 마인드스톰 spike

CM께서 바쁜 일이 있으셔서 1,2교시는 IEEE(미국전기전자학회)에서 정한 컴퓨터에서 실수를 저장하는 방식과..

십진수 45000.67을 float형으로 저장하였을 때 4Byte의 저장공간은 어떤 값을 가지는가를 조사하라고 하셨다.


IEEE 754의 단정도 부동소수점 표현방식 다운로드 (정리한 문서)



1.사회생활

“말귀를 잘 알아 듣고 일을 하는 방법을 알아야 한다.”


2.이동통신

CDMA: 코드분할 (미국,한국) 퀄컴사

GSM: 시분할 TDMA기반 (유럽)

표준이 없고 양분되어 있당


3.정수의 저장방식

ⓐ매그니튜드

ⓑ보수


4.실수의 저장방식

십진수 15.357을 IEEE 754 단정도 부동소수점 방식으로 저장하려면 다음과 같이 정규화(정식 규격화)를 한다.

ⓐIEEE 754방식은 최상위비트(MSB)가 부호비트로 매그니튜드방식과 닮았다. (양수 = 0, 음수 = 1)

ⓑ소수점위에 한자리만 남겨둠.  (1111.0101…  -> 1.1110101...)

ⓒ2-3을 하였으니 원래의 값으로 복원하려면 지수가 3이 되어야 함.

ⓓ여기에 지수의 음수와 양수를 표현하기 위해 바이어스로 127을 더 함.

ⓔ지수를 2진수로 변환하면 1000 0010이 된다.

ⓕ가수는 정수1을 빼고 그대로 적어줌. 23bit채우고 마지막은 반올림

그러므로,

십진수 15.357을 IEEE 754방식으로 저장하면 16진수 0x4175B646이 되고, 10진수 1098233414라는 거대한 수가 된다.

         (float)                                                    (int)                            (int)


5.실수 자료형 (Visual Studio 6.0)

float   ≤  double  ≤  long double

(4Byte)    (8Byte)         (8Byte) ※컴파일러마다 다를 수 있음.

예제소스 다운로드(20110329_realnumber)




6.형식지정자 (C언어)

[그림] CPU와 메모리의 연결도식과 메모리 내의 변수들


iNum을 %d형식지정자로 출력하면 0xFFFFFFFF는 최대값이고 최상위비트가 1이므로 -1 (보수)

           %u형식지정자로 출력하면 0xFFFFFFFF는 최대값이니 자연수로 출력하면 최대값인 232-1


cNum을 %d형식지정자로 출력하면 0xFF는 32비트 레지스터로 제로확장되어 상위 3Byte는 0으로 채워진다. 255.

           %u형식지정자로 출력하면 마찬가지로 255


cNum2를 %d형식지정자로 출력하면 0xFF는 32비트 레지스터로 부호확장되어 상위 3Byte는 1(음수)로 채워진다. -1

           %u형식지정자로 출력하면 마찬가지로 부호확장되어 모두 ‘1’로 채워지므로 최대값인 232-1.


예제소스 다운로드(20110329_%u)


참고자료 다운로드(자료형.pdf)



7.마인드스톰 spike (사진과 동영상만 추가하고 내용은 내일작성)




예전과 같이 나는 부품을 찾고 진우는 조립을 하였다.
험난한 과정이다.






부품 조립방향을 잘 못 하여 조금 혼란스러웠으나 진우씨가 방향을 잘 찾아 무사히 조립을 마쳤다.
전갈의 꼬리를 만들고 시험삼아 늘리고 줄여봤다.
잘 된다.




초음파센서 마운트는 내가 직접 만들어 붙였다.
완성 후 전갈의 위용이 늠름하다.




추가로 빛센서를 달아 라인을 따라 갈 수 있게 하였다.
그런데 전면의 마찰이 더 심해질 것만 같다.

 

 


 방향  A모터  B모터  C모터
 UP  꼬리 내림  우회전  좌회전
 DOWN  꼬리 올림  좌회전  우회전





무한히 반복되는 루프 안에,
처음 초음파로 거리를 측정하여 80cm이상이고, 바닥이 백색(빛센서의 값이 50초과)이면 우회전함.
                                                        바닥이 흑색(빛센서의 값이 50이하)이면 좌회전함.
다시 초음파로 거리를 측정하여 80cm이하이고, 20cm이상이면 후진함.
                                                        20cm이하이면 멈추고 꼬리로 공격함. 터치센서는 꼬리 복귀용.
즉, 아래와 같이 순서도를 그릴 수 있다.





동영상1. 연속 꼬리 공격!!
 


무한 루프 안에, 꼬리 내림과 올림이 있어 계속 꼬리 공격을 한다.
맞으면 아프겠다.

 
동영상2. 튜토리얼 reaction




일정거리 안에 물체가 있으면 후진을 계속 할 줄 알았는데 주춤거린다. 초음파센서의 변동폭이 좀 큰 것 같다.
책을 사정거리 내에 가져다 놓으면 꼬리로 매섭게 공격한다.
20cm < 물체와의 거리 < 80cm면 후진하게 되어 있으나 이상하게 후진을 잘 하지 않는다.
문제있네



동영상3. 라인을 따라가다 시작시점에서 이탈함


 
센서의 위치(흔들림)도 그렇고 소스코드도 불완전하니 당연한 결과인가?
계속 실험해서 적정값을 찾아내자.




동영상4.라인따라가기 실패

 



같은 프로그램에 설정값도 같은데 시작지점으로 향하는 코너에서 이탈한다. ㅠㅠ




동영상5. 라인따라가기 시작지점을 통과하였다!



프로그램을 조금 수정하여 흰색바탕에 1.5초이상 머무르면 센서입력을 무시한채 4초간 좌회전을 하도록 하였다.
두 번 돌지 않는 이유는 배터리가 없어서다.
과연 그럴까? ㅎㅎ