Pull to refresh
77
0
Send message
По-моему, в России предпочитают использовать что-то среднее. У нас говорят «миллион — миллиард (а не биллион) — триллион».
Хотелось бы напомнил, что есть две системы именования чисел — с короткой шкалой и с длинной шкалой. И слово «триллион», например, может означать как 1012 так и 1018.
Скажите, а что означает маленькая буква «с» перед именем каждой функции? Это ваш корпоративный стандарт или тлетворное влияние freeRTOS?
Каждый раз, когда я вижу подобное разделение, у меня в голове голос робота говорит: «Че-ло-век, пи-ши код сю-да».
Просто в условиях я этого не увидел, вот и спросил.
Один мой знакомый подкинул мне интересную задачку: нужно вызвать функцию через указатель и передать в нее предварительно сохраненные аргументы. Обязательным условием было не использовать std::function.

Вероятно, я чего-то не понял, но почему нельзя было именно это и сделать? То есть, создать просто указатель на функцию и вызвать функцию через него?
Да, без магнетометра другая функция вроде бы без ошибок.

Единственное, что фикс не мой, я его только нагуглил :)
Хотелось бы предупредить тех, кто собирается использовать этот фильтр.
На офф. сайте есть более свежая версия — www.x-io.co.uk/open-source-imu-and-ahrs-algorithms — в которой, судя по всему, есть ошибка в формуле шага градиентного спуска (источник).

Как есть
// Gradient decent algorithm corrective step
s0 = -_2q2 * (2.0f * q1q3 — _2q0q2 — ax) + _2q1 * (2.0f * q0q1 + _2q2q3 — ay) — _2bz * q2 * (_2bx * (0.5f — q2q2 — q3q3) + _2bz * (q1q3 — q0q2) — mx) + (-_2bx * q3 + _2bz * q1) * (_2bx * (q1q2 — q0q3) + _2bz * (q0q1 + q2q3) — my) + _2bx * q2 * (_2bx * (q0q2 + q1q3) + _2bz * (0.5f — q1q1 — q2q2) — mz);

s1 = _2q3 * (2.0f * q1q3 — _2q0q2 — ax) + _2q0 * (2.0f * q0q1 + _2q2q3 — ay) — 4.0f * q1 * (1 — 2.0f * q1q1 — 2.0f * q2q2 — az) + _2bz * q3 * (_2bx * (0.5f — q2q2 — q3q3) + _2bz * (q1q3 — q0q2) — mx) + (_2bx * q2 + _2bz * q0) * (_2bx * (q1q2 — q0q3) + _2bz * (q0q1 + q2q3) — my) + (_2bx * q3 — _4bz * q1) * (_2bx * (q0q2 + q1q3) + _2bz * (0.5f — q1q1 — q2q2) — mz);

s2 = -_2q0 * (2.0f * q1q3 — _2q0q2 — ax) + _2q3 * (2.0f * q0q1 + _2q2q3 — ay) — 4.0f * q2 * (1 — 2.0f * q1q1 — 2.0f * q2q2 — az) + (-_4bx * q2 — _2bz * q0) * (_2bx * (0.5f — q2q2 — q3q3) + _2bz * (q1q3 — q0q2) — mx) + (_2bx * q1 + _2bz * q3) * (_2bx * (q1q2 — q0q3) + _2bz * (q0q1 + q2q3) — my) + (_2bx * q0 — _4bz * q2) * (_2bx * (q0q2 + q1q3) + _2bz * (0.5f — q1q1 — q2q2) — mz);

s3 = _2q1 * (2.0f * q1q3 — _2q0q2 — ax) + _2q2 * (2.0f * q0q1 + _2q2q3 — ay) + (-_4bx * q3 + _2bz * q1) * (_2bx * (0.5f — q2q2 — q3q3) + _2bz * (q1q3 — q0q2) — mx) + (-_2bx * q0 + _2bz * q2) * (_2bx * (q1q2 — q0q3) + _2bz * (q0q1 + q2q3) — my) + _2bx * q1 * (_2bx * (q0q2 + q1q3) + _2bz * (0.5f — q1q1 — q2q2) — mz);



Как должно быть
s0= -_2q2*(2*(q1q3 — q0q2) — ax) + _2q1*(2*(q0q1 + q2q3) — ay) + -_4bz*q2*(_4bx*(0.5 — q2q2 — q3q3) + _4bz*(q1q3 — q0q2) — mx) + (-_4bx*q3+_4bz*q1)*(_4bx*(q1q2 — q0q3) + _4bz*(q0q1 + q2q3) — my) + _4bx*q2*(_4bx*(q0q2 + q1q3) + _4bz*(0.5 — q1q1 — q2q2) — mz);

s1= _2q3*(2*(q1q3 — q0q2) — ax) + _2q0*(2*(q0q1 + q2q3) — ay) + -4*q1*(2*(0.5 — q1q1 — q2q2) — az) + _4bz*q3*(_4bx*(0.5 — q2q2 — q3q3) + _4bz*(q1q3 — q0q2) — mx) + (_4bx*q2+_4bz*q0)*(_4bx*(q1q2 — q0q3) + _4bz*(q0q1 + q2q3) — my) + (_4bx*q3-_8bz*q1)*(_4bx*(q0q2 + q1q3) + _4bz*(0.5 — q1q1 — q2q2) — mz);

s2= -_2q0*(2*(q1q3 — q0q2) — ax) + _2q3*(2*(q0q1 + q2q3) — ay) + (-4*q2)*(2*(0.5 — q1q1 — q2q2) — az) + (-_8bx*q2-_4bz*q0)*(_4bx*(0.5 — q2q2 — q3q3) + _4bz*(q1q3 — q0q2) — mx)+(_4bx*q1+_4bz*q3)*(_4bx*(q1q2 — q0q3) + _4bz*(q0q1 + q2q3) — my)+(_4bx*q0-_8bz*q2)*(_4bx*(q0q2 + q1q3) + _4bz*(0.5 — q1q1 — q2q2) — mz);

s3= _2q1*(2*(q1q3 — q0q2) — ax) + _2q2*(2*(q0q1 + q2q3) — ay)+(-_8bx*q3+_4bz*q1)*(_4bx*(0.5 — q2q2 — q3q3) + _4bz*(q1q3 — q0q2) — mx)+(-_4bx*q0+_4bz*q2)*(_4bx*(q1q2 — q0q3) + _4bz*(q0q1 + q2q3) — my)+(_4bx*q1)*(_4bx*(q0q2 + q1q3) + _4bz*(0.5 — q1q1 — q2q2) — mz);



Резонно. Впрочем, если очень надо — можно и дорожки перерезать.
Собственно, непонятно, чем плоха discovery. У нее, конечно, нет готовых разъемов под платы расширения, но ее можно воткнуть в макетку и просто проводами подсоединяться.
передать нашим потомкам мир, более лучший, чем получили мы

Не «более лучший». Или «лучший» или «более хороший».
Извините за грамманацизм, но тут фраза аж жирным выделена, очень в глаза бросается.
Но шире всего ГМ-технологии в Европе применяются в фармацевтике: это и инсулин, и эритропоэтин (почечный гормон), и интерферон (гормон роста), и другие препараты [11]

Я не биолог, но по-моему гормон роста — это соматотропин. А интерфероны — это антивирусные белки.
Это было в «Мире смерти», пистолет прямо в руку прыгал из кобуры на предплечье.
Интересно, а нельзя ли обойтись без сенсора? Ведь при сжатии кулака еще и петля натягивается.
Вот это уже хуже. А можно посмотреть полную спецификацию на язык?
Должен признать, что после документации на С (которая чудовищна как по объему, так и по формулировкам), этот документ читается довольно приятно.

Раз уж зашла речь — скажите, а есть ли в Обероне такое понятие — «неопределенное поведение»?
Понятно, спасибо. Да, я мог бы и сам догадаться, зачеркнутое равно :)
Не помешала бы небольшая справка по коду. Лично я мысленно споткнулся на коде:
WHILE p # T.trailer DO

Что делает оператор #?

Еще, это, конечно, субъективно, но мне кажется, что код КРИЧИТ НА МЕНЯ. Оберон обращает внимание на регистр ключевых слов? Или это просто вкус у автора кода такой странный?
У меня вопрос скорее по Оберону (хотя топик не совсем про него, но тем не менее).

Скажите пожалуйста, если в нем все переменные нужно объявлять в начале функции, то я не могу объявить счетчик для цикла так, чтобы он был виден только внутри цикла?

В С89 в основном это очень раздражает.
Автодополнение есть начиная с 4.7 вроде бы. Подкаталоги делать нельзя и в пятом, это да.

Кейл вообще плохой пример для подражания, но есть в нем и удобные вещи.

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity