Числа с фиксированной запятой (Fixed-point arithmetic)

Обсуждение прошивок SECU-3. Discussion of SECU-3 firmware.

Moderator: STC

User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Числа с фиксированной запятой (Fixed-point arithmetic)

Post by STC »

В коде SECU-3 используется метод представления вещественных чисел в виде целых (fixed-point). Это обусловлено необходимостью быстро проводить вычисления и отсутствием FPU.

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

Stranger21 для тебя:
http://ru.wikipedia.org/wiki/%D0%A4%D0% ... 0%B0%D1%8F
http://en.wikipedia.org/wiki/Fixed-point_arithmetic
:lol:
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Stranger21
LQFP144 - On Top Of The Game
Posts: 1664
Joined: Fri Jul 01, 2011 2:10 pm
Location: г Уфа

Re: Числа с фиксированной запятой (Fixed-point arithmetic)

Post by Stranger21 »

да я понял что целые числа используються . я не могу понять почему Один формат перевода для всех величин.
ну веть я же прав , что в коэфициентах РХХ , не следует умножать на 32 . может тогда убрать коэфициент дробный вообще? тоесть сделать чотбы пользователь вводил не 0.13 0.14 0.15 а прям целыми числами 13 14 15 . и ничего переводить тогда не нужно будет!!!!
в формуле РХХ просто тогда сделать дополнение умножить на 32/100 , получим тоже самое , только с бОльшей точностью . округляя до целых результирующий уоз от рхх *32 , чем передавая в программу заведомо грубые коэфициенты
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
nikll
LQFP144 - On Top Of The Game
Posts: 553
Joined: Sun Nov 06, 2011 9:20 pm
Location: Russia, Yekaterinburg
Contact:

Re: Числа с фиксированной запятой (Fixed-point arithmetic)

Post by nikll »

Stranger21 wrote:да я понял что целые числа используються . я не могу понять почему Один формат перевода для всех величин.
ну веть я же прав , что в коэфициентах РХХ , не следует умножать на 32 . может тогда убрать коэфициент дробный вообще? тоесть сделать чотбы пользователь вводил не 0.13 0.14 0.15 а прям целыми числами 13 14 15 . и ничего переводить тогда не нужно будет!!!!
в формуле РХХ просто тогда сделать дополнение умножить на 32/100 , получим тоже самое , только с бОльшей точностью . округляя до целых результирующий уоз от рхх *32 , чем передавая в программу заведомо грубые коэфициенты
А смысл? вместо дробности 32 сделать 10? соответсвенно как минимум снижение точности в 3,2 раза плюс возможно снижение скорости мат операций т.к. бинарно-сдвиговые операции (x *= 2 равно x<<1 , а x /= 4 равно x>>2 при условии отброса дробный частей) выполняются явно быстрее десятичного умножения.
На пиках я аналогично кодил, прирост производительности очень красноречив.
P.S. несовсем понимаю а что пользователь должен вводить? изначальные карты? так там один раз пересчет идет в самом менеджере, а представление чисел внутри прошивки помоему воообще глубоко по барабану, пусть хоть в тринарной или 60ричной системе главное чтобы работало быстро...
Stranger21
LQFP144 - On Top Of The Game
Posts: 1664
Joined: Fri Jul 01, 2011 2:10 pm
Location: г Уфа

Re: Числа с фиксированной запятой (Fixed-point arithmetic)

Post by Stranger21 »

ковырял - ковырял ... виндовс приложения в Си для меня пока тяжело очень ... совершенно не понимаю ... еще и оболочка неудобная . Сибуилдер вроде больше похож на Дельфи . в ней мне проще , понятнее , там визуально все делается .
ну да ладно . я нашел место где описывается нижнее , верхнее , и шаг в окне параметров коэффициента . если я сделаю там только целые числа от 000 до 999 , и шаг 1 , программа корректно передаст из умножив на 32 правильно? тогда подправив форумулу в РХХ я смогу корректно передавать коэффицент .
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Числа с фиксированной запятой (Fixed-point arithmetic)

Post by STC »

так там один раз пересчет идет в самом менеджере, а представление чисел внутри прошивки помоему воообще глубоко по барабану, пусть хоть в тринарной или 60ричной системе главное чтобы работало быстро
Так и есть. Вот и я об этом.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Stranger21
LQFP144 - On Top Of The Game
Posts: 1664
Joined: Fri Jul 01, 2011 2:10 pm
Location: г Уфа

Re: Числа с фиксированной запятой (Fixed-point arithmetic)

Post by Stranger21 »

блин .... да чтож вы не поймете то .... БАГ в менеджере !!! так может понятнее будет .... вкладка РХХ , два окна отцительный и положительный коэффициент .... СТАВИМ 0.12 !!!!! жмем - сохранить!!!!! , выключаем - включаем -- СТОИТ 0.13!!!!!!!!!!!!!!! ставим 0.10 , сохраняем - стоит 0.09!!!!!!! 0.11=0.13 0.15=0.16 ..... нельзя сохранить промежуточные числа!!! можно тлько их вводить - но она не ПЕРЕДАЮТЬСЯ в программу , изза ОКРУГЛЕНИЯ очень грубого!!!!!!
блин ну как же мне обьяснить то .. слов не хватает ..... числа 0.09 0.13 0.16 0.19 только можно ввести в коэффициенты!!!

0.13 х 32 = 4.16 , дробная часть откидываеться в программу передаеться только 4!!!!!
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Числа с фиксированной запятой (Fixed-point arithmetic)

Post by STC »

Опять считаешь сябя умнее людей, которые на этом собаку съели.
Цитата из википедии отвечающая на твой вопрос про 0.12 и 0.13 (для солдат и матросов)
Binary vs. decimal

The two most common fixed-point types are decimal and binary. Decimal fixed-point types have a scaling factor that is a power of ten, for binary fixed-point types it is a power of two.

Binary fixed-point types are most commonly used, because the rescaling operations can be implemented as fast bit shifts. Binary fixed-point numbers can represent fractional powers of two exactly, but, like binary floating-point numbers, cannot exactly represent fractional powers of ten. If exact fractional powers of ten are desired, then a decimal format should be used. For example, one-tenth (0.1) and one-hundredth (0.01) can be represented only approximately by binary fixed-point or binary floating-point representations, while they can be represented exactly in decimal fixed-point or decimal floating-point representations. These representations may be encoded in many ways, including BCD.
Binary fixed-point numbers can represent fractional powers of two exactly, but, like binary floating-point numbers, cannot exactly represent fractional powers of ten.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Stranger21
LQFP144 - On Top Of The Game
Posts: 1664
Joined: Fri Jul 01, 2011 2:10 pm
Location: г Уфа

Re: Числа с фиксированной запятой (Fixed-point arithmetic)

Post by Stranger21 »

да понимаю я это .... но почему не перенести перевод из десятичного дробного в целочисленное , не в коэфициенте , а прям в формуле конечной? . ну веть точнее будет же.
если мы введем целочисленый коэффициент в менеджере , и будем его передавать в программу даже умножая на 32 как делается сейчас , то в формулу подставится и 12 и 13 и 14 и 15 как сами собой есть , преобразуются в итоге под число с основанием 2 и все будет хорошо .

если нельзя так сдеалть , не понятно почему , тогда нужно хотябы ввести в менеджер в окне приращение не 0.01 как сейчас , а чтобы были только Реально существующие числа , чтобы не вводить пользователя в заблуждение! . Он ставит 0.12 получает 0.13 .... каждому потом обьяснять что вот двичная целочисленная система по другому не может ? ну вот сядет , тупой юзер , и будет тыкать весь день туда суда , прошивки менять , искать проблему !!! почему 0.16 много , а 0.13 мало и он не может поставить промежуточное число .

ладно . буду ковырять сам , как из репозитария менеджер будет собираться последний вопрос --- то что не сохраняются промежуточные числа это ТАК задуманно или это только у меня так?
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
nikll
LQFP144 - On Top Of The Game
Posts: 553
Joined: Sun Nov 06, 2011 9:20 pm
Location: Russia, Yekaterinburg
Contact:

Re: Числа с фиксированной запятой (Fixed-point arithmetic)

Post by nikll »

если нехватает точности то ее можно повисить, например вместо 32 заюзать 64 или 128, тут главное за диапазон не выйти, максимальное значение данной переменной в "нормальном" виде какое? а тип переменной в мк? если шорт то с базой 32 получается примерно до 2000, и еще в догонку тебе зачем надо именно 0,13? это всеголиш представление для тебя, в мк и в железе все по другому.
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Числа с фиксированной запятой (Fixed-point arithmetic)

Post by STC »

Точности хватает. Но ее можно повысить, при этом нужно все внимательно перепроверять, чтобы не было переполнения.
Типы данных в основном int16 и uint16. Микроконтроллер 8-ми битный и 32-х битные инты использовать накладно.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Post Reply