реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Ошибк при передаче значений переменной в функцию
Vladimir_T
сообщение Apr 26 2014, 03:52
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Здравствуйте, подскажите, пожалуйста... Странная ситуация, не должно быть так, но у меня то есть....
Мне нужно быстро вычислять значения функции синус, для чего стал использовать разложение в степенной ряд,
первым членом ограничился. Стал отлаживать, а функция постоянно мне выдает бесконечно малую величину, стал смотреть отладчиком в Кейле 5.4, в самой функции и вижу, что в функцию постоянно передается значение
X = 1.084202e-019, тогда, как передаются значения от 0 до pi/4. Никаких вложенных прерываний, чтобы стек нарушался - нет. Где моя ошибка? Подскажите, пожалуйста!

Код
#define  Factr_3  0.0556

float Rough_Sinus (float X)
{float Ret = X - X*X*X / Factr_3;
return Ret;
}
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 26 2014, 05:06
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



надеюсь вы знаете что это разложение вблизи нуля, и по мере отхождения от него ошибка будет расти.
второй момент это отладчик KEIL, для того чтобы его использовать надо поставить оптимизацию проекта на 0, не на default, а именно на 0, потому что дефалт у него -2.
ну и третья ошибка, 3! == 6

sin x = x - x^3 / 3! + x^5 / 5!... -ряд Маклорена
и вы надеюсь помните что X в радианах
Go to the top of the page
 
+Quote Post
adnega
сообщение Apr 26 2014, 05:25
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Golikov A. @ Apr 26 2014, 09:06) *
надеюсь вы знаете что это разложение вблизи нуля, и по мере отхождения от него ошибка будет расти.
второй момент это отладчик KEIL, для того чтобы его использовать надо поставить оптимизацию проекта на 0, не на default, а именно на 0, потому что дефалт у него -2.
ну и третья ошибка, 3! == 6

sin x = x - x^3 / 3! + x^5 / 5!... -ряд Маклорена
и вы надеюсь помните что X в радианах

3! = 6.0f
Go to the top of the page
 
+Quote Post
Vladimir_T
сообщение Apr 26 2014, 13:02
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Спасибо, оптимизация включена по умолчанию, поставлю нулевую и проверю!
Степень я не делю, а домножаю на коэффициент.
Да, с коэффициентом я ошибся: нужно 1/3! = 0.166667, а я взял 1/3*3! = 0.0556.
Т.е. вместо деления, делаю умножение на обратную величину. С элементарной математикой здесь нет ошибки, я проверил все на ПК, точность для меня приемлема. А нв АРМе 966 не идет.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 26 2014, 13:12
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Проверьте еще, на месте ли прототип вызываемой функции.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 26 2014, 13:39
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(Vladimir_T @ Apr 26 2014, 17:02) *
Спасибо, оптимизация включена по умолчанию, поставлю нулевую и проверю!
Степень я не делю, а домножаю на коэффициент.
Да, с коэффициентом я ошибся: нужно 1/3! = 0.166667, а я взял 1/3*3! = 0.556.


X*X*X / Factr_3 - вы делитеsm.gif

X*X*X * Koef - вот так умножатьsm.gif...

отладка кейла - это отдельная песня, там еще есть трудности с переменным не влезающими к регистры, он их просто не отображает и так далее, но 90% проблем отладки под кейлом это отладка оптимизированного кода, я сначала думал что мир разрушился прежде чем понял что происходит
Go to the top of the page
 
+Quote Post
Lagman
сообщение Apr 26 2014, 13:40
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(aaarrr @ Apr 26 2014, 17:12) *
Проверьте еще, на месте ли прототип вызываемой функции.

+1
Go to the top of the page
 
+Quote Post
Vladimir_T
сообщение Apr 27 2014, 05:24
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Цитата(aaarrr @ Apr 26 2014, 17:12) *
Проверьте еще, на месте ли прототип вызываемой функции.

Прототип описан в .h - файле. Компиляция идет без ошибок.



Цитата(Vladimir_T @ Apr 26 2014, 17:02) *
Спасибо, оптимизация включена по умолчанию, поставлю нулевую и проверю!
Степень я не делю, а домножаю на коэффициент.
Да, с коэффициентом я ошибся: нужно 1/3! = 0.166667, а я взял 1/3*3! = 0.0556.
Т.е. вместо деления, делаю умножение на обратную величину. С элементарной математикой здесь нет ошибки, я проверил все на ПК, точность для меня приемлема. А на АРМе 966 не идет по Кейл.



Цитата(Golikov A. @ Apr 26 2014, 17:39) *
X*X*X / Factr_3 - вы делитеsm.gif

X*X*X * Koef - вот так умножатьsm.gif...

отладка кейла - это отдельная песня, там еще есть трудности с переменным не влезающими к регистры, он их просто не отображает и так далее, но 90% проблем отладки под кейлом это отладка оптимизированного кода, я сначала думал что мир разрушился прежде чем понял что происходит


Потратил время на отладку, хотелось бы получить ожидаемый результат. Мне можно было бы большую таблицу сгенерить и расположить на куче, но это уже другая реализация задачи...
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 27 2014, 06:05
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



я обычно отлаживал сообщениями в порт, просто так привык. Но тут на фирме были жетаги и я решил воспользоваться чем то новым. А делали они автономные мобильные высоковольтные лаборатории, в общем отлаживал я в слабоотапливаемом гараже, под высоким напряжением, без интернета под рукой... И код, который прыгает со строчки на строчку, а при передачи в него 5 получает 7, на выход выдает 12.5 а на экранчике отображает -6.28.... я уже начал верить в тайные знаки, и в какую то беду 28 июня и так далее... намерзся, все проклял, и зарекся использовать жетаг. Сейчас я знаю в чем загвоздка, и иногда отлаживаю жетагом, но история был запоминающаяся....


Цитата
Прототип описан в .h - файле. Компиляция идет без ошибок.


да, надо еще проверить что функция в сишнике соответствует описанию в ашнике, потому что иначе кеил еще любит не известные параметры считать int32_t. То есть если вы создали функцию, объявили в ашнике, а потом изменили объявление в сишнике, что-то добавили, то в другом месте при вызове этой функции что-то может пойти не так, правда будет варнинг про неявное объявление...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 27 2014, 10:36
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Вообще, проще всего посмотреть содержимое R0 сразу после входа в функцию: тут уж отладчик не соврет никак.
Go to the top of the page
 
+Quote Post
Vladimir_T
сообщение Apr 28 2014, 15:10
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Цитата(aaarrr @ Apr 27 2014, 14:36) *
Вообще, проще всего посмотреть содержимое R0 сразу после входа в функцию: тут уж отладчик не соврет никак.

Спасибо огромное за ценные советы. Дело было, конечно, в прототипе функции, некорректно описана. Пришел в понедельник, на свежую голову, да еще помня о Ваших советах и все заработало !!! Как здорово, что есть этот форум и его замечательные профессиналы!
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 28 2014, 15:43
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Вливайтесь!
Профессионалов все меньше, хамоватой школоты все больше, просторы инета полными глючных исходников, и все больше и чаще их применяют в коммерческих проектах без проверок...
Go to the top of the page
 
+Quote Post
Vladimir_T
сообщение Apr 28 2014, 16:21
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



bb-offtopic.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 03:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01465 секунд с 7
ELECTRONIX ©2004-2016