Страница 1 из 1

Вычисление COS

Добавлено: Вс янв 16, 2011 19:27:47
DimanVIP
Доброго всем времени суток!
Возникла проблема с вычислением COSинуса в IAR. Никак не получается ни с использованием библиотеки math.h, ни со сторонними функциями. На выходе всегда получается одно и тоже число независимо от вводимого угла.
Может кто решал подобную задачу? Помоги пожалуйста!

Re: Вычисление COS

Добавлено: Вс янв 16, 2011 19:49:49
O-LED
напиши свою функцию. Этож 3-5 строк всего.

Re: Вычисление COS

Добавлено: Вс янв 16, 2011 19:53:21
DimanVIP
Самая простая

#include <math.h>
...
for (i = 0; i <90 ; i++)
cosinus = cos(i);
....

cosinus всегда = 9.23231e-39.

Re: Вычисление COS

Добавлено: Вс янв 16, 2011 20:52:28
Meteor
Посмотрите описание функции, в компьютерных сях аргумент представлен в радианах. А тут?
ЗЫ. Арккосинус Вашего значения 90 гр.
Может не обнуляется аргумент?

Re: Вычисление COS

Добавлено: Вс янв 16, 2011 21:04:04
DimanVIP
Да пок каким бы соусом какое значение не толкал - ответ всегда один.
Что значит не обнуляется и какой аргумент?

Re: Вычисление COS

Добавлено: Вс янв 16, 2011 21:54:45
DimanVIP
А вот с acos какая-то непонятная ерунда.
загоняемое значение (0-200) - результат :
0 - 1,5708
1 - 0
2 - 3,40282
и до 200 - 3,40282

загоняемое значение ((0-200) * 3.14 / 180) - результат :
0 - 1,5708
0,0174444 - 0,785398
0,715222 - 0
1,01178 - 3,40282
и до победного - 3,40282
Показаны только загоняемые значения, на которых возвращаемые значения меняются.
В промежутке между ними они НЕ МЕНЯЮТСЯ!

Re: Вычисление COS

Добавлено: Вс янв 16, 2011 21:55:16
ibiza11

Код: Выделить всё

  while(1)
  {
    x=cos(3.1415/180*y);
    y++;
  }
Все прекрасно считает, от 1 до -1 и наоборот. y-unsigned char, x-float

Re: Вычисление COS

Добавлено: Вс янв 16, 2011 22:17:23
DimanVIP
АААААА-а-а-а-а-а.
Я с ума сойду скоро уже наверное....
Для чистоты эксперимента создал абсолютно новый проект с одной единственной фунцией и...
все естесственно заработало....

Буду копать.... я это дело так не оставлю...

Re: Вычисление COS

Добавлено: Пн янв 17, 2011 11:58:53
kolobok0
DimanVIP писал(а):...cosinus всегда = 9.23231e-39.
тупой вопрос.
а вы косинус смотрите на каждом проходе цикла или чисто в конце? :)

и не совсем тупой.
под дизазмом смотрели? пошажно? всё встанет на свои места. сам вызов имеется ввиду.

(круглый)

Re: Вычисление COS

Добавлено: Вт янв 18, 2011 00:42:14
DimanVIP
смотрел естественно пошажно.
Весь прикол в том был, что по ошибке вычисления проводились в прерывании.
И получалось так, что еще до окончания вычисления, прерывания вызывалось вновь и т.д.
Смотрел я в протесе, и только потом еще обратил внимание что он тупить начал и файл подкачки перевалил за гиг.
Перенес в основной цикл, где ему и положено быть, и все конечно заработало.

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

Вот так вот....

Re: Вычисление COS

Добавлено: Вт янв 18, 2011 12:02:38
Aleksis
DimanVIP, а не могли бы вы этой реализацией поделится?

Re: Вычисление COS

Добавлено: Вт янв 18, 2011 18:23:20
DimanVIP
Aleksis писал(а):DimanVIP, а не могли бы вы этой реализацией поделится?
Делюсь, в том виде в каком нашел. Там есть файл протоса, запустите и все увидите.

Re: Вычисление COS

Добавлено: Ср янв 19, 2011 11:13:27
Aleksis
Спасибо