Розшифровка даних EDSAC#3554

Розшифровка даних EDSAC

1 секунда
64 мегабайти
Середня

Перший у світі повномасштабний електронний цифровий комп'ютер зі збереженою програмою був EDSAC (Electronic Delay Storage Automatic Calculator). EDSAC мав набір інструкцій на основі акумулятора, працював з -бітними словами (та -бітними подвійними словами) і використовував -бітний код телетайпа для введення та виведення.

EDSAC програмувався за допомогою дуже простої асемблерної мови: однобуквений код операції, за яким слідувала беззнакова десяткова адреса, а потім літера "F" (для повного слова) або "D" (для подвійного слова). Наприклад, інструкція "A 128 F" означала "додати повне слово з адреси 128 до акумулятора", і збиралася в -бітне двійкове значення , що складалося з -бітного коду операції (="додати"), -бітного операнда (00010000000 = 128) та одного біта , що позначає операцію з повним словом (біт вказував би на операцію з подвійним словом).

Хоча арифметика на EDSAC була фіксованою точкою з двійковим доповненням, це не була просто цілочисельна арифметика (як це зазвичай буває на сучасних машинах). Апаратура EDSAC припускала двійкову точку між найлівішим бітом і його безпосереднім наступником. Таким чином, апаратура могла обробляти лише значення в діапазоні -1.0 \leq x < 1.0. Наприклад:

Як ви бачите, найбільше можливе додатне значення було:

01111111111111111 = 0.9999847412109375

а найменше можливе додатне значення було:

00000000000000001 = 2^{-16} = 0.0000152587890625

(Це також є приріст між послідовними значеннями на EDSAC).

За цікавим збігом (або елегантним дизайнерським рішенням), код операції для додавання () був таким же, як і код телетайпа для літери "A". Код операції для віднімання був таким же, як і код телетайпа для "S" (), і так далі. Це спростило програмування для асемблера (який, до речі, складався лише з інструкції). Алфавіт телетайпа EDSAC був "PQWERTYUIOJ#SZK*?F@D!HNM&LXGABCV" (з "P"=, "Q"=, і так далі, до "V"=).

На жаль, асемблер EDSAC не мав спеціальних директив для значень даних. З іншого боку, не було причин, чому звичайні інструкції не могли б використовуватися для цього, таким чином, програміст EDSAC, який бажав зарезервувати місце для константи (представленої як ), використовував би інструкцію "S O F", а для (яка приблизно представлена як ) "T 682 D", і так далі.

Ваше завдання - написати програму, яка буде перекладати інструкції EDSAC у відповідні десяткові дроби.

Вхідні дані

Перший рядок введення містить одне ціле число (1 \leq P \leq 1000), яке є кількістю наборів даних, що слідують. Кожен набір даних - це один рядок, що містить (номер набору даних), за яким слідує пробіл, а потім інструкція EDSAC у формі: , де - це один символ з алфавіту EDSAC, - беззнакове десяткове число (0 \leq d < 2^{11}), а - це або 'D' або 'F'.

Вихідні дані

Для кожного набору даних є один рядок виходу. Він містить номер набору даних (), за яким слідує один пробіл, а потім точний десятковий дріб, представлений інструкцією EDSAC, включаючи мінус (для від'ємних значень). Формат для десяткового дробу: , де - це необов'язковий мінус, - це або , або , а - будь-яка десяткова цифра (-). Має бути принаймні і не більше цифр після десяткової точки. Зайві нулі в дробі мають бути усунені.

Приклади

Приклад 1

Loading
Loading