January 29th, 2020

QuatCore

QuatCore: printf - числа с фиксированной точкой

Целые числа - это хорошо, но совсем шикарно было бы выдать параметры взаимного расположения объектов в понятных человеку числах, дальность - в метрах, углы - в градусах.

Первый шаг к этому - научиться ставить запятую между любыми десятичными разрядами. Это было бы предельно просто, используй мы в любом случае 5 цифр, но более заковыристо, если мы не хотим лишних нулей, однако обязаны их поставить перед запятой и после запятой.

Настолько заковыристо, что добавляет нашей процедуре ещё 4 слова (8 байт), а потом ещё 2 слова, чтобы чуть высвободить регистры, итого укладываемся ровно в 30 слов (60 байт), при этом новая процедура может и не рисовать запятую вовсе, т.е держать и старую, и новую нам не требуется. Любой каприз (со знаком, без знака, запятую ставить, и если ставить, то где) - всё здесь, в 30 словах :)



Collapse )

Poll #2098687 Ровно ноль

Как должен отображаться ноль в числах с фикс. запятой?

0
5(71.4%)
0,0000 (повторяя количество разрядов после запятой)
2(28.6%)
QuatCore

Про старинные правила округления

Когда-то victor_chapaev упомянул про инженерные правила, по которым 200.32 округляется до 200, 9.321456 до 9.3, а 1.342567 до 1.34.

Это в целом логично, стоит хотя бы взглянуть на ряд E24 номиналов резисторов и конденсаторов. Вблизи единицы значения идут тучно:
1,0 1,1 1,2 1,3 1,5 1,6...
а в конце декады - куда как скромнее:
5,6 6,2 6,8 7,5 8,2 9,1

в итоге, точность повсюду получается порядка 5%.

Если взглянуть на примеры этих инженерных правил, мы получаем 0,25% в первом случае (0,5/200), 0,5% во втором и 0,37% в третьем, т.е одного порядка, при том, что для 9,3 хватило всего 2 значащих цифр.

Как это не удивительно, но в QuatCore мы введём нечто похожее, потому что так реализовать будет тупо проще :)



Collapse )
QuatCore

QuatCore: выводим показания дальности

Вот теперь у нас есть все "ингредиенты", чтобы показать дальность в "терминале" (а позже - и на ЖК-экранчике) в понятном для человека виде:



На удивление радостно видеть эту строчку - все разрозненные части работы потихоньку стягиваются воедино.

Collapse )

На самом деле, мы пока немножко не то вывели. Правильнее из значений OurExp, OurTx, OurTy, OurTz получить длину вектора и два угла - и отображать именно их! Мы пока что сжульничали и показали OurTx - "продольную компоненту". Так что ещё предстоит чуть-чуть покопаться.
QuatCore

QuatCore: чего-то мы перемудрили с print

Или недомудрили, не понял пока. Но что-то не то!

Вот мы решили не заморачиваться с упаковыванием по 2 символов в каждом слове, поэтому в каждом слове данных выходит 1 свободный байт. А потом какого-то рожна решили, что каждая строка должна оканчиваться ЕЩЁ ОДНИМ СЛОВОМ, конкретно -32768. Тут уж "или крест сними..." - мы либо утрамбовываемся как следует, но тогда сопровождать каждый символ флагом "это последний символ" - жуткое расточительство. А если мы этого не делаем - то у нас для этих флагов места - ну просто завались!

А то как начал в "бортовую программу" закладывать все строки - и свободное пространство в 256 словах как-то резко начало заканчиваться :) Хоть на последнем символе поэкономим!
Collapse )