Minifloat является двоичным представлением числа с плавающей точкой , которая имеет очень мало бит.
Минифлоат в этом вопросе будет определен как 6-битное число m
, которое имеет следующее представление:
1 бит для представления знака числа. Этот бит будет,
0
если число положительное, и1
если число отрицательное.3 бита для представления степени числа, смещенной на
3
(т.е. показатель степени110
фактически представляет коэффициент 2 3 , а не 2 6 ).- Показатель
000
относится к субнормальному числу. Мантисса относится к дробной части числа с целой частью,0
умноженной на коэффициент наименьшего возможного показателя степени (в данном случае 2 -2 ).
- Показатель
2 бита для представления мантиссы числа. Если показатель степени отличается от
000
или111
, 2 бита представляют дробную часть после a1
.- Показатель степени
111
представляет,infinity
если мантисса есть0
, иNaN
(не число) в противном случае.
- Показатель степени
В статье Википедии это будет упоминаться как (1.3.2.3) мини-поплавок.
Некоторые примеры представления этого минифлота:
000000 = 0.00 = 0
000110 = 1.10 × 2^(1-3) = 0.375
001100 = 1.00 × 2^(3-3) = 1
011001 = 1.01 × 2^(6-3) = 10
011100 = infinity
011101 = NaN
100000 = -0.00 = -0
100011 = -0.11 × 2^(1-3) = -0.1875 (subnormal)
101011 = -1.11 × 2^(2-3) = -0.875
110100 = -1.00 × 2^(5-3) = -4
111100 = -infinity
111111 = NaN
Ваша задача - построить сеть из двух входных вентилей NAND, которая принимает 6 входов, представляющих мини-поплавок, a
и 6 входов, представляющих мини-поплавок b
, и возвращает 6 выходов, представляющих мини-поплавок a + b
.
Ваша сеть должна правильно добавлять субнормалы. Например,
000001
+000010
должен равняться000011
, а001001
+000010
=001010
.Ваша сеть должна правильно складывать и вычитать бесконечности. Все конечное, добавленное к бесконечности, является той же бесконечностью. Положительная бесконечность плюс отрицательная бесконечность
NaN
.NaN
Плюс что - то должно равнятьсяNaN
, хотя , которыйNaN
она равна до вас.Как вы справляетесь с добавлением положительного нуля и отрицательного нуля друг к другу, зависит от вас, хотя ноль плюс ноль должны равняться нулю.
Ваша сеть может реализовать любое из следующих правил округления в зависимости от удобства:
- Округление вниз (к отрицательной бесконечности)
- Округление вверх (к положительной бесконечности)
- Круглый к нулю
- Округлить от нуля
- Округление до ближайшего, с половинами, округленными в соответствии с любым из вышеуказанных правил
Для упрощения вы можете использовать логические элементы И, ИЛИ, НЕ и XOR на вашей диаграмме со следующими соответствующими показателями:
NOT: 1
AND: 2
OR: 3
XOR: 4
Каждый из этих баллов соответствует количеству вентилей NAND, необходимых для построения соответствующих вентилей.
Логическая схема, которая использует наименьшее количество вентилей NAND для правильной реализации всех вышеперечисленных требований, выигрывает.
источник
Ответы:
830 NANDS
Он использует 24 NOT, 145 AND, 128 OR, 33 XOR. Он всегда округляется до нуля, может возвращать либо -0, либо +0 для нулевых значений, и я считаю, что он правильно обрабатывает бесконечность и NaN:
Ниже у меня есть закодированное представление схемы. У меня мало опыта в аннотировании этих типов вещей, поэтому я не знаю, каков типичный способ сделать это, но каждая переменная является булевой, поэтому ясно, что она описывает схему. Другое дело, у меня нет ни ноу-хау, ни, вероятно, упорства, чтобы попытаться составить диаграмму этого, но если есть какое-то простое в использовании программное обеспечение, кто-нибудь хочет указать, мне было бы интересно взглянуть.
источник
OR(AND(w,x),AND(y,z))
являетсяNAND(NAND(w,x),NAND(y,z))
сохранение 4, и вы использовали первую конструкцию несколько раз; и ваше лечение NaN немного неправильно, потому чтоInf + NaN
должно бытьNaN
.