Помощь по математическим расчётам

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

Помощь по математическим расчётам

Сообщение DmitryAnarhist (DmitryAnarhist) » 15 май 2014, 18:50

Всем привет.
Очередной камень преткновения: простенькая программа деления переменной Х на переменную У, результат бесконечная дробь, контроллер выдаёт шесть знаков после запятой, нужен для дальнейших вычислений только один знак после запятой в формате X.X
То есть вопрос по округлению переменных типа Float. Намекните как решить?
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: DmitryAnarhist
Имя: DmitryAnarhist
(SPB)
Заинтересованный
Заинтересованный
Информация о пользователе

Re: Помощь по математическим расчётам

Сообщение mim (mim) » 15 май 2014, 19:43

Это как пример...
Код: выделить все
float start = 3.1415926f;
float res = ((int)(start * 100)) / 100;
//res = 3.14

Но!!!!!! Намекаю... нужно переходить в целочисленные вычисления!

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

ЗЫ Для нормального решения проблемы информации мало...
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе

Re: Помощь по математическим расчётам

Сообщение DmitryAnarhist (DmitryAnarhist) » 16 май 2014, 05:04

Хм... пришёл к таким-же выводам, пока решил из Float не уходить...
Для перехода в целочисленные, помещать дробную и целую часть в разные переменные и считать по отдельности?
Больше информации в данном случае может всё радикально усложнить, в программе десяток макросов на несколько экранов каждый, даже просто понять где там что происходит и зачем будет сложно... если чуть подробней об этом куске, то речь об линейной(пока линейной) интерполяции координат, в целочисленном виде всё работает если координаты между собой делятся нацело, а если нет, возникает ошибка позиционирования...
Скорость вычислений на переменных Float относительно целых переменных такой-же разрядности будет одинаковой?
И ещё вопрос с выводом переменных на текстовый дисплей, пока не понял почему Float выводятся без точки через стандартный флоукодовский макрос.... так и должно?
Аватар пользователя
Ник: DmitryAnarhist
Имя: DmitryAnarhist
(SPB)
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

Re: Помощь по математическим расчётам

Сообщение mim (mim) » 16 май 2014, 06:14

DmitryAnarhist писал(а):1. Для перехода в целочисленные, помещать дробную и целую часть в разные переменные и считать по отдельности?
2. Скорость вычислений на переменных Float относительно целых переменных такой-же разрядности будет одинаковой?
3. И ещё вопрос с выводом переменных на текстовый дисплей, пока не понял почему Float выводятся без точки через стандартный флоукодовский макрос.... так и должно?

1. Нет. Например, 35,67=>3567, вот и вся арифметика. Просто нужно учитывать разрядность. Запятая - это всего лишь условность. Я много приводил примеров, касаемых пересчета значений АЦП. Нужно изначально все это вложить в расчеты.
2. Это легко проверить, сделав тестовый пример в Протеусе и замерять время выполнения. Даже для одной и тойже функции, при одинаковой разрядности переменных время выполнения зависит от величины значения переменной.
3. Я тоже не понял как ты это делаешь. В данном случае Float должана конвертироваться в текст (выводится как Стринг)... Как выводить дробное значение на ЖКИ при целочисленном вычислении есть в примерах про датчик 18b20.

ЗЫ Я же писал, мало информации, думаю что у тебя есть определенное недопонимание процесса вычислений, отсюда и у меня не складывается картинка. Такое нужно разбирать на конкретных примерах... Я же и говорю, нужно читать форум весь подряд, а не вылазить раз в пятилетку, в полном ступоре, когда уже наворочено столько что жалко все переделывать (а другим и понять тяжело)...
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: Помощь по математическим расчётам

Сообщение DmitryAnarhist (DmitryAnarhist) » 18 май 2014, 07:21

1, Понятно, можно попробовать, (с дробями ещё какая-то непонятная проблема есть, случайные числа появляются в четвёртом знаке после точки, накапливаются при вычислениях и дают ошибку, по крайней мере на имитации так, на камне неизвестно, на всякий случай поставил фильтрацию 0.01, вроде-бы это решило проблему)
2, Проверил, пока скорости для моих целей достаточно.(Я обычно сам контроллер заставляю выдавать метку, и меряю осцилом, не очень верю протеусу.)
3, Пока не до этого было, начинаю решать вывод на дисплей.

С линейной интерполяцией решено, всё заработало, начинаю думать о круговой.
Аватар пользователя
Ник: DmitryAnarhist
Имя: DmitryAnarhist
(SPB)
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

Re: Помощь по математическим расчётам

Сообщение DmitryAnarhist (DmitryAnarhist) » 19 май 2014, 06:22

А вот и ещё проблемка, как-то не правильно вычисляется синус, у всех так или у меня одного?
(в начале должен считать счётчик Z0, в конце только счётчик X0, sin(90) должен быть равен 1, у меня синус прыгает вокруг ноля то в минус то в плюс)
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: DmitryAnarhist
Имя: DmitryAnarhist
(SPB)
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

Re: Помощь по математическим расчётам

Сообщение mim (mim) » 19 май 2014, 06:53

DmitryAnarhist писал(а):не правильно вычисляется синус, у всех так или у меня одного?
Если вычислять таким образом, то так будет у всех... Достаточно открыть любой справочник, книгу, инет или любую книгу по программированию (хоть на чем) и увидеть такое магическое слово - Радиан.

ЗЫ математическая библиотека avr-gcc
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: Помощь по математическим расчётам

Сообщение DmitryAnarhist (DmitryAnarhist) » 19 май 2014, 08:05

Угу, значит у всех... спасибо, долго-бы ещё ломал голову)
Слышал я про радианы, даже считал что-то с ними, думал давно уж морально устарели, не пользует никто.....)
Аватар пользователя
Ник: DmitryAnarhist
Имя: DmitryAnarhist
(SPB)
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

Re: Помощь по математическим расчётам

Сообщение mim (mim) » 19 май 2014, 08:14

DmitryAnarhist писал(а):Слышал я про радианы, думал давно уж морально устарели, не пользует никто.....)
Всю жизни с ними считали, и продолжают их пользовать...
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: Помощь по математическим расчётам

Сообщение DmitryAnarhist (DmitryAnarhist) » 24 май 2014, 01:15

И очередная проблема, вычисление квадратного корня выдаёт ошибку при компиляции: Flowcode3.c:(.text+0x1da): undefined reference to `float32_sqrt'
При чём на любом коде, даже на самом простейшем, как в примере. Я опять что-то делаю не так?
Кстати и возведение в степень(хотя-бы в квадрат) в ФК обнаружить не удалось, я слепой или его действительно там нет(несколько раз искал)...
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: DmitryAnarhist
Имя: DmitryAnarhist
(SPB)
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

След.

Вернуться в ПЕСОЧНИЦА

Кто сейчас на форуме

Пользователь просматривает форум: нет зарегистрированных пользователей

cron