Програмування EDSAC#3553

Програмування EDSAC

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

Першим повномасштабним електронним цифровим комп'ютером у світі був EDSAC (Електронний обчислювач на лініях затримки). EDSAC мав набір команд, що працював з -бітовими словами (і -бітовими подвійними словами), а також використовував -бітовий телетайп код для введення та виведення даних.

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

Хоча арифметика в EDSAC була з фіксованою точкою, це не була просто цілочисельна арифметика (як у звичайних сучасних машинах). Вважалося, що десяткова точка в EDSAC апаратно знаходиться між найлівішим бітом і бітом праворуч від нього. Таким чином, апаратно можна було оперувати лише значеннями в проміжку -1.0 \le 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 \le P \le 1000) - кількість тестів. Кожен тест представлений одним рядком і містить два числа і . - це номер тесту. - десяткове значення у вигляді , де - необов'язковий знак мінус, а - будь-яка з десяткових цифр (-). Після десяткової точки присутня як мінімум і не більше цифр.

Вихідні дані

Для кожного тесту виведіть один рядок. Він повинен містити номер тесту (), пробіл і команду EDSAC, достатню для задання вказаної константи. Команду слід виводити наступним чином: символ коду операції "opcode", пробіл, операнд (невід'ємне десяткове ціле), пробіл і символ 'F' або 'D' (за необхідності). Якщо константу не можна точно представити бітами, то значення слід округлити в сторону нуля (вгору для від'ємних і вниз для додатних чисел). Якщо значення не лежить в проміжку -1.0 \le D \le 1.0, то слід вивести рядок "INVALID VALUE" замість команди EDSAC.

Приклади

Приклад 1

Loading
Loading