시간 제한
메모리 제한
시간 제한
1초
메모리 제한
128 MB
EDSAC (Electronic Delay Storage Automatic Calculator)은 프로그램을 주기억장치에 저장한 뒤 실행할 수 있었던 초기 디지털 컴퓨터이다. EDSAC에는 가산기를 사용하는 명령어가 있었고, 계산은 17비트 word 타입과 35비트 double word 타입을 바탕으로 이루어졌다. 입출력에는 5비트 텔레타이프 코드가 사용되었다.
EDSAC 프로그램은 단순한 어셈블리어로 작성할 수 있다. 각 명령어는 문자 하나, 음이 아닌 십진수 주소값, 그리고 F 또는 D로 이루어진다. F는 full word 타입을, D는 double word 타입을 뜻한다. 예를 들어 명령어 A 128 F는 메모리 주소 128에 있는 full word 값을 가산기에 더하라는 뜻이다. 이 명령어는 이진수 11100000100000000으로 표현된다. 앞의 5비트 11100은 add 명령의 opcode이고, 다음 11비트 00010000000은 피연산자 주소 128이며, 마지막 비트 0은 full word 타입을 뜻한다. double word 타입이면 마지막 비트는 1이다.
EDSAC의 산술 연산은 고정소수점 2의 보수 방식이다. 연산 장치는 소수점이 가장 높은 자리, 즉 가장 왼쪽 비트와 그 바로 오른쪽 비트 사이에 있다고 본다. 따라서 17비트 word 타입 값 x의 표현 범위는 -1.0 <= x < 1.0이다.
| 값 | 이진수 표현 |
|---|---|
| -1.0 | 10000000000000000 |
| 1/2 | 01000000000000000 |
| 3/4 | 01100000000000000 |
| -1/2 | 11000000000000000 |
표현할 수 있는 가장 큰 양수는 01111111111111111 = 0.9999847412109375이고, 가장 작은 양수는 00000000000000001 = 2^(-16) = 0.0000152587890625이다.
흥미롭게도 add 명령의 opcode와 텔레타이프 문자 A의 코드는 모두 11100이고, subtract 명령과 문자 S의 코드도 모두 01100이다. 텔레타이프 코드로 표현할 수 있는 알파벳은 PQWERTYUIOJ#SZK*?F@D!HNM&LXGABCV의 32자이며, 5비트 opcode로 표현할 수 있는 값도 32개이다. 이 순서에서 P는 00000, Q는 00001이고, 하나씩 증가하여 V는 11111이 된다.
하지만 이 어셈블리어에는 데이터 값을 직접 표현하는 전용 코드가 없다. 그래서 일반 명령어의 비트열을 데이터 값으로도 사용할 수 있다. 예를 들어 상수 3/4의 비트열 01100000000000000은 S 0 F로, 1/3에 가까운 비트열 00101010101010101은 T 682 D로 표현된다.
EDSAC 명령어가 주어졌을 때, 그 비트열이 나타내는 십진수를 출력하는 프로그램을 작성하시오.
첫 줄에 테스트 케이스의 수 P가 주어진다. (1 <= P <= 1000)
각 테스트 케이스는 한 줄에 c d s 형태의 EDSAC 명령어로 주어진다. c는 EDSAC 알파벳 문자 하나이다. d는 부호 없는 십진수이며 0 <= d < 2^11을 만족한다. s는 D 또는 F이다.
각 테스트 케이스마다 주어진 EDSAC 명령어에 해당하는 십진수 하나를 [-]b.ddd... 형태로 출력한다. 음수일 때만 마이너스 부호를 출력한다. b는 0 또는 1이고, 소수점 아래 자릿수는 1자리 이상 16자리 이하이다. 끝의 불필요한 0은 출력하지 않는다.