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

 
 
 
Reply to this topicStart new topic
> Математические функции "math.h", В AVR32studio
lisstret
сообщение Jun 15 2010, 04:11
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 10-06-10
Из: Владивосток
Пользователь №: 57 835



Проблема при использовании математический фунций "math.h"
Вообщем там есть такие прототипы:
Код
extern double atan _PARAMS((double));
extern double cos _PARAMS((double));
extern double sin _PARAMS((double));
extern double tan _PARAMS((double));
extern double tanh _PARAMS((double));
extern double frexp _PARAMS((double, int *));
extern double modf _PARAMS((double, double *));
extern double ceil _PARAMS((double));
extern double fabs _PARAMS((double));
extern double floor _PARAMS((double));


допустим нужно посчитать синус:

Код
#include <avr32/io.h>
#include "compiler.h"
#include "board.h"
#include "math.h"

void main(void)
{
    double pi=3.14;
    double s;

    s=sin(pi);
}

При компиляции ошибка: undefined reference to `sin'

Если агрумент просто написать как:

Код
#include <avr32/io.h>
#include "compiler.h"
#include "board.h"
#include "math.h"

void main(void)
{
    double pi=3.14;
    double s;

    s=sin(3.1428571428571428571428571428571);
}

То ошибки нет.

Пробывал тип возращаемого значения как extern double делать, тоже ошибка.

Скажите как правильно пользоваться математическими функциями?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jun 15 2010, 04:33
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(lisstret @ Jun 15 2010, 08:11) *
При компиляции ошибка: undefined reference to `sin'

Линкер не находит функцию sin(), на которую ссылается компилятор.
Скорее всего, забыли подключить математическую библиотеку libm.a
Посмотрите на предмет наличия ключа линкера -lm
Цитата
Если агрумент просто написать как:
s=sin(3.1428571428571428571428571428571);
То ошибки нет.

Возможно, значение вычисляется препроцессором (хотя странно, откуда он знает про синус)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
jasper
сообщение Jun 15 2010, 05:04
Сообщение #3


Народный чинитель
***

Группа: Участник
Сообщений: 415
Регистрация: 15-07-05
Пользователь №: 6 811



Цитата(MrYuran @ Jun 15 2010, 10:33) *
Линкер не находит функцию sin(), на которую ссылается компилятор.
Скорее всего, забыли подключить математическую библиотеку libm.a
Посмотрите на предмет наличия ключа линкера -lm

Так и есть.
Надо зайти в свойства проекта, т.е. Properties -> C/C++ Build -> Settings. Там на вкладке Tool Settings: AVR32/GNU C Linker -> Libraries.
В поле Libraries (-l) добавить значение m.
Go to the top of the page
 
+Quote Post
lisstret
сообщение Jun 15 2010, 07:48
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 10-06-10
Из: Владивосток
Пользователь №: 57 835



Вроде че то получилось. А где можно найти документы или что нить почитать об этом?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jun 15 2010, 08:31
Сообщение #5


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(lisstret @ Jun 15 2010, 11:48) *
А где можно найти документы или что нить почитать об этом?

Если первоисточники - то здесь
А производные по конкретным продуктам - ищите во вложенной документации.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 16:02
Рейтинг@Mail.ru


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