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

Проблема с библиотекой math.h в geany

Добавлено: 18 дек 2020, 21:51
Dimmension
Geany не видит библиотеку math.h, соответственно, компилятор воспринимает все математические функции как ошибки. Как подключить библиотеку?

Проблема с библиотекой math.h в geany

Добавлено: 18 дек 2020, 22:00
symon2014

Проблема с библиотекой math.h в geany

Добавлено: 19 дек 2020, 06:26
Dimmension
Гуглил, однако, но все советы сводятся к добавлению -lm к команде компиляции в терминале. Но мне то надо что-то с geany сделать. Библиотеку поставил:
sudo apt-get install libm. a
но это не помогло.

Проблема с библиотекой math.h в geany

Добавлено: 19 дек 2020, 10:46
WWolf
Dimmension, исходник в студию...

Проблема с библиотекой math.h в geany

Добавлено: 19 дек 2020, 16:19
rogoznik
Dimmension, может покажешь свой исходник, а то тут нет экстрасенсов чтоб угадывать что и как ты подключаешь

Проблема с библиотекой math.h в geany

Добавлено: 19 дек 2020, 16:22
Dimmension
Простите, не понял, исходник чего - текст программы, которую не могу скомпилировать?

Проблема с библиотекой math.h в geany

Добавлено: 19 дек 2020, 16:23
rogoznik
Dimmension писал(а):
19 дек 2020, 16:22
Простите, не понял, исходник чего - текст программы, которую не могу скомпилировать?
Да

Проблема с библиотекой math.h в geany

Добавлено: 19 дек 2020, 16:44
Dimmension

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

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double pi=3.141592653589;
double A2, A3, A4, A5, A6, A7, A8, A9, A10;
double eps, r0;
int N;

double a31=0.075,           a32=0.225,
       a41=44.0/45.0,       a42=-56.0/15.0,       a43=32.0/9.0,
       a51=19372.0/6561.0,  a52=-25360.0/2187.0,  a53=64448.0/6561.0,  a54=-212.0/729.0,
       a61=9017.0/3168.0,   a62=-355.0/33.0,      a63=46732.0/5247.0,  a64=49.0/176.0,    a65=-5103.0/18656.0,
       a71=35.0/384.0,                            a73=500.0/1113.0,    a74=125.0/192.0,   a75=-2187.0/6784.0,     a76=11.0/84.0;

double b21=5179.0/57600.0,                        b23=7571.0/16695.0,  b24=0.6140625,     b25=-92097.0/339200.0,  b26=187.0/2100.0,  b27=0.025;

/*        Dorman-Prince algorithm	*/

       double DoPrin(double t0, double tf,  double dx0, double dz0, double x0, double z0, double a, double q, double ph0){

	FILE *fp;			//creating file for writing  data
	if((fp=fopen("Quad_traect_2.7.dat", "w"))==NULL)
	{
		perror("Quad_traect_2.7.dat");
		return 1;
	}

double t;       //	running time
double x;       //	1-st variable
double y;       //	2-d variable
double dx;      //	3-rd variable
double dy;      //	4-th variable
double dx1, dx2, dy1, dy2, x1, x2, y1, y2;
float R1, R2, R3, R4, al0, al1, al2, al3, al4;
double dFx3, dFy3, dFx4, dFy4, dFx5, dFy5, dFx6, dFy6, dFx7, dFy7, dFx8, dFy8, dFx9, dFy9, dFx10, dFy10;
double wwx, wwy;
double F01, F21, F31, F41, F51, F61, F71;
double F02, F22, F32, F42, F52, F62, F72;
double F03, F23, F33, F43, F53, F63, F73;
double F04, F24, F34, F44, F54, F64, F74;
double Nt=tf*pi;         //finish time
int n=1;		// step calculator
float h=0.1;   //	initial step
  x=x0; x1=x0; x2=x0;
  y=z0; y1=z0; y2=z0;
  dx=dx0; dx1=dx0; dx2=dx0;
  dy=dz0; dy1=dz0; dy2=dz0;
  t=t0;
  N=1;
  printf("t= %lf  x= %lf  y= %lf  step= %lf\n",t/pi,x,y,h);
  fprintf(fp, "%lf %lf  %lf\n",t/pi,x,y);

          	  while(t<=Nt)
          {
int k=0;
/*      derivatives for spatial harmonics       */

dFx3=3*x*x-3*y*y;
dFy3=-6*x*y;
dFx4=4*pow(x,3)-12*x*y*y;
dFy4=-12*x*x*y+4*pow(y,3);
dFx5=5*pow(x,4)-30*x*x*y*y+5*pow(y,4);
dFy5=-20*pow(x,3)*y+20*x*pow(y,3);
dFx6=6*pow(x,5)-60*pow(x,3)*y*y*+30*x*pow(y,4);
dFy6=-30*pow(x,4)*y+60*x*x*pow(y,3)-6*pow(y,5);
dFx7=7*pow(x,6)-105*pow(x,4)*y*y+105*x*x*pow(y,4)-7*pow(y,6);
dFy7=-42*pow(x,5)*y+140*pow(x,3)*pow(y,3)-42*x*pow(y,5);
dFx8=8*pow(x,7)-168*pow(x,5)*y*y+280*pow(x,3)*pow(y,4)-56*x*pow(y,6);
dFy8=-56*pow(x,6)*y+280*pow(x,4)*pow(y,3)-168*x*x*pow(y,5)+8*pow(y,7);
dFx9=9*pow(x,8)-252*pow(x,6)*y*y+630*pow(x,4)*pow(y,4)-252*x*x*pow(y,6)+9*pow(y,8);
dFy9=-72*pow(x,7)*y+504*pow(x,5)*pow(y,3)-504*pow(x,3)*pow(y,5)+72*x*pow(y,7);
dFx10=10*pow(x,9)-360*pow(x,7)*y*y+1260*pow(x,5)*pow(y,4)-840*pow(x,3)*pow(y,6)+90*x*pow(y,8);
dFy10=-90*pow(x,8)*y+840*pow(x,6)*pow(y,3)-1260*pow(x,4)*pow(y,5)+360*x*x*pow(y,7)-10*pow(y,9);

wwx=A3*dFx3/A2+A4*dFx4/(A2*A2)+A5*dFx5/pow(A2,3)+A6*dFx6/pow(A2,4)+A7*dFx7/pow(A2,5)+A8*dFx8/pow(A2,6)+A9*dFx9/pow(A2,7)+A10*dFx10/pow(A2,8);
wwy=A3*dFy3/A2+A4*dFy4/(A2*A2)+A5*dFy5/pow(A2,3)+A6*dFy6/pow(A2,4)+A7*dFy7/pow(A2,5)+A8*dFy8/pow(A2,6)+A9*dFy9/pow(A2,7)+A10*dFy10/pow(A2,8);

la1:

if(k>10) goto la2;
F01=-(a+2*q*cos(2*(t-ph0)))*(x+0.5*wwx);     //integrated function 1
F02=(a+2*q*cos(2*(t-ph0)))*(y-0.5*wwy);        //integrated function 2
F03=dx;                                       //integrated function 3
F04=dy;                                       //integrated function 4

F21=-(a+2*q*cos(2*(t+h/5.0-ph0)))*(x+h*F03/5.0+0.5*wwx);
F22=(a+2*q*cos(2*(t+h/5.0-ph0)))*(y+h*F04/5.0-0.5*wwy);
F23=dx+h*F01/5.0;
F24=dy+h*F02/5.0;

F31=-(a+2*q*cos(2*(t+0.3*h-ph0)))*(x+h*(a31*F03+a32*F23)+0.5*wwx);
F32=(a+2*q*cos(2*(t+0.3*h-ph0)))*(y+h*(a31*F04+a32*F24)-0.5*wwy);
F33=dx+h*(a31*F01+a32*F21);
F34=dy+h*(a31*F02+a32*F22);

F41=-(a+2*q*cos(2*(t+0.8*h-ph0)))*(x+h*(a41*F03+a42*F23+a43*F33)+0.5*wwx);
F42=(a+2*q*cos(2*(t+0.8*h-ph0)))*(y+h*(a41*F04+a42*F24+a43*F34)-0.5*wwy);
F43=dx+h*(a41*F01+a42*F21+a43*F31);
F44=dy+h*(a41*F02+a42*F22+a43*F32);

F51=-(a+2*q*cos(2*(t+8.0*h/9.0-ph0)))*(x+h*(a51*F03+a52*F23+a53*F33+a54*F43)+0.5*wwx);
F52=(a+2*q*cos(2*(t+8.0*h/9.0-ph0)))*(y+h*(a51*F04+a52*F24+a53*F34+a54*F44)-0.5*wwy);
F53=dx+h*(a51*F01+a52*F21+a53*F31+a54*F41);
F54=dy+h*(a51*F02+a52*F22+a53*F32+a54*F42);

F61=-(a+2*q*cos(2*(t+h-ph0)))*(x+h*(a61*F03+a62*F23+a63*F33+a64*F43+a65*F53)+0.5*wwx);
F62=(a+2*q*cos(2*(t+h-ph0)))*(y+h*(a61*F04+a62*F24+a63*F34+a64*F44+a65*F54)-0.5*wwy);
F63=dx+h*(a61*F01+a62*F21+a63*F31+a64*F41+a65*F51);
F64=dy+h*(a61*F02+a62*F22+a63*F32+a64*F42+a65*F52);

F71=-(a+2*q*cos(2*(t+h-ph0)))*(x+h*(a71*F03+a73*F33+a74*F43+a75*F53+a76*F63)+0.5*wwx);
F72=(a+2*q*cos(2*(t+h-ph0)))*(y+h*(a71*F04+a73*F34+a74*F44+a75*F54+a76*F64)-0.5*wwy);
F73=dx+h*(a71*F01+a73*F31+a74*F41+a75*F51+a76*F61);
F74=dy+h*(a71*F02+a73*F32+a74*F42+a75*F52+a76*F62);

dx1=dx+h*(a71*F01+a73*F31+a74*F41+a75*F51+a76*F61);
dx2=dx+h*(b21*F01+b23*F31+b24*F41+b25*F51+b26*F61+b27*F71);
dy1=dy+h*(a71*F02+a73*F32+a74*F42+a75*F52+a76*F62);
dy2=dy+h*(b21*F02+b23*F32+b24*F42+b25*F52+b26*F62+b27*F72);
x1=x+h*(a71*F03+a73*F33+a74*F43+a75*F53+a76*F63);
x2=x+h*(b21*F03+b23*F33+b24*F43+b25*F53+b26*F63+b27*F73);
y1=y+h*(a71*F04+a73*F34+a74*F44+a75*F54+a76*F64);
y2=y+h*(b21*F04+b23*F34+b24*F44+b25*F54+b26*F64+b27*F74);

        R1=fabs(dx2-dx1);
        R2=fabs(dy2-dy1);
        R3=fabs(x2-x1);
        R4=fabs(y2-y1);

        if(R1>=eps) {
        	al1=sqrt(sqrt(eps/R1));
        	al2=sqrt(sqrt(eps/R2));
        	al3=sqrt(sqrt(eps/R3));
        	al4=sqrt(sqrt(eps/R4));
        	al0=fmin(fmin(al1,al2),fmin(al3,al4));
        	h=0.95*al0*h;
        	k++;
        	goto la1;
        }
        else
        if(R2>=eps) {
        	al1=sqrt(sqrt(eps/R1));
        	al2=sqrt(sqrt(eps/R2));
        	al3=sqrt(sqrt(eps/R3));
        	al4=sqrt(sqrt(eps/R4));
        	al0=fmin(fmin(al1,al2),fmin(al3,al4));
        	h=0.95*al0*h;
        	k++;
        	goto la1;
        }
        else
        if(R3>=eps) {
        	al1=sqrt(sqrt(eps/R1));
        	al2=sqrt(sqrt(eps/R2));
        	al3=sqrt(sqrt(eps/R3));
        	al4=sqrt(sqrt(eps/R4));
        	al0=fmin(fmin(al1,al2),fmin(al3,al4));
        	h=0.95*al0*h;
        	k++;
        	goto la1;
        }
        else
        if(R4>=eps) {
        	al1=sqrt(sqrt(eps/R1));
        	al2=sqrt(sqrt(eps/R2));
        	al3=sqrt(sqrt(eps/R3));
        	al4=sqrt(sqrt(eps/R4));
        	al0=fmin(fmin(al1,al2),fmin(al3,al4));
        	h=0.95*al0*h;
        	k++;
        	goto la1;
        }

        else
        	if(R1<eps/64.0)
        		if(R2<eps/64)
        			if(R3<eps/64)
        				if(R4<eps/64) {
        	al1=sqrt(sqrt(eps/R1));
        	al2=sqrt(sqrt(eps/R2));
        	al3=sqrt(sqrt(eps/R3));
        	al4=sqrt(sqrt(eps/R4));
        	al0=fmax(fmax(al1,al2),fmax(al3,al4));
        	h=0.95*al0*h;
        	k++;
        	goto la1;
        }
        if(sqrt(x2*x2+y2*y2)>r0)
            break;
la2:
        x=x2;
        y=y2;
        dx=dx2;
        dy=dy2;
        t=(float)t+h;
        n++;
        printf("t= %lf x= %lf y= %lf  h= %lf\n",t/pi,x,y,h);
        fprintf(fp, "%lf %lf  %lf\n",t/pi,x,y);
        }
    if (t<Nt) N=0;
    if (t>2*Nt) N=0;

  printf("n= %d  N= %d\n",n,N);

    return N;
}

  /*	Main program	*/

  int main(){


/*      multipole amplitudes        */

    A2=1.0;
    A3=0.0;
    A4=0.0;
    A5=0.0;
    A6=0.0;
    A7=0.0;
    A8=0.0;
    A9=0.0;
    A10=0.0;

  double t0=0.0;              //initial time
  double tf=50.0;             //finish time in periods HF field
  double x0=0.5;			//initial value of x-coordinate
  double z0=0.5;           //initial value y-coordinate
  double dx0=0.0;          //initial value x-projection of velocity
  double dz0=0.0;			//initial value y-projection of velocity
  double ph0=0.0*pi;             //initial phase
        eps=1.0E-6; 	        //accuracy
        r0=1.14;            //radius of field

  double q=0.7;             //q-parameter
  double a=0.224;             //a-parameter

  DoPrin(t0, tf, dx0, dz0, x0, z0, a, q, ph0);

  return 0;
}
 ! Сообщение из: symon2014
Слышал что нибудь о форматировании текста?

Проблема с библиотекой math.h в geany

Добавлено: 19 дек 2020, 16:52
Dimmension
Таки да, но все форматирование почему то исчезло, когда сюда вставил.

Проблема с библиотекой math.h в geany

Добавлено: 19 дек 2020, 16:53
symon2014
Dimmension писал(а):
19 дек 2020, 16:52
все форматирование почему то исчезло, когда сюда вставил.
Панель форматирования текста в темах/ответах

Проблема с библиотекой math.h в geany

Добавлено: 19 дек 2020, 16:57
Dimmension
Нет, но попробую воспользоваться в следующий раз.

Проблема с библиотекой math.h в geany

Добавлено: 19 дек 2020, 17:13
symon2014
Dimmension писал(а):
19 дек 2020, 06:26
sudo apt-get install libm. a
https://controlc.com/1687ba21
и вот прямо это поставилось?

Проблема с библиотекой math.h в geany

Добавлено: 19 дек 2020, 17:19
madesta
Dimmension писал(а):
19 дек 2020, 06:26
но все советы сводятся к добавлению -lm к команде компиляции в терминале
Не сказал бы, что из предложенной вам ссылки http://pogugli.com/?360237 это предлагают все советы. Мне, например, бросилось в глаза ещё 2 совета (спойлер). Я не профи, но м.б. наведёт на мысли.
1. geany должен знать, где искать правильный список символов, и поэтому он читает источники всех открытых файлов, поэтому, если вам нужен полезный список символов, вы должны открыть все необходимые вам файлы заголовков перед началом программирования. Даже если geany хочет автоматически искать в заголовочных файлах, которые вы включаете, он не сможет угадать, какую версию gtk вы хотите использовать для вашего проекта (gtk2, gtk3, ...)..
2. Дело в том, что "math.h" — это имя, в том числе, файла из стандартной библиотеки. Поэтому, когда ты пишешь имя без пути, компилятор ищет его
1) в каталоге файла, который его включает
2) по путям, указанным в переменной окружения INCLUDE (а также в настройках Студии, если компилить в ней, а не в командной строке)
3) по путям, указанным в опциях компилятора
Значит, включать его можно с относительным путём #include "../Math/math.h"

Проблема с библиотекой math.h в geany

Добавлено: 19 дек 2020, 17:20
rogoznik
Dimmension, у меня норм компиляет

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

gcc qwe.cpp -lm -o qwe
Зайди в настройки Geany и пропиши там этот ключ для компиляции своего проекта

Проблема с библиотекой math.h в geany

Добавлено: 19 дек 2020, 17:39
Dimmension
В какой именно строке настройки прописать этод код?

Проблема с библиотекой math.h в geany

Добавлено: 19 дек 2020, 17:42
Dimmension
и вот прямо это поставилось?
Не могу сказать точно, но очень похоже.

Проблема с библиотекой math.h в geany

Добавлено: 19 дек 2020, 17:44
Dimmension
Я не профи, но м.б. наведёт на мысли.
Я тоже не профи, и просто не понял, что нужно делать.

Проблема с библиотекой math.h в geany

Добавлено: 19 дек 2020, 18:06
rogoznik
Dimmension, вот скажи мне ты хочешь научиться чему-то или как? Тебе сказано что надо сделать. Уж, будь добр, потрать время разобраться как это сделать. Тут не платная тех. поддержка чтоб давать тебе готовый ответ.

Проблема с библиотекой math.h в geany

Добавлено: 19 дек 2020, 18:14
konstantin
Запустите Geany и откройте нужный Вам проект, в котором компилятор не находит math.h .
Выбрать в меню : Сборка - Установить команды сборки .
Откроется окно "Свойства проекта". В этом окне в таблице "Команды для языка: С"
в строке "Build" нужно дописать к gcc -Wall -o "%e" "%f" дополнительно через пробел -lm .
Выглядеть будет так : gcc -Wall -o "%e" "%f" -lm
И всё будет работать.
Пояснение можете найти в книге Стивена Пратта "Язык программирования C. Лекции и упражнения, 6-е издание.pdf"
в 16-ой главе на странице 695(в параграфе "Немного тригонометрии") :

Если в процессе компиляции будет выдано сообщение, такое как
Undefined: _sqrt /* sqrt() -- это одна из математических функций */
Не определено: _sqrt
или
'sqrt': unresolved external
'sqrt': нераспознанный внешний идентификатор
либо нечто подобное, значит, компилятор-компоновщик не смог найти библиотеку ма­-
тематических функций. В системах Unix может потребоваться указать компоновщику
на необходимость поиска библиотеки математических функций с помощью флага - lm:
сс rect_pol.c - lm
Обратите внимание, что флаг - lm находится в конце команды. Причина в том,
что компоновщик вступает в игру после того, как компилятор скомпилирует файл С.
Компилятор GCC в системе Linux может вести себя в такой же манере:
gcc rect_pol.c -lm

Проблема с библиотекой math.h в geany

Добавлено: 19 дек 2020, 20:00
Dimmension
rogoznik, спасибо большое за подробный и информативный ответ, без твоего совета я даже не знаю, как жил бы дальше.
Всем остальным участникам обсуждения - просто спасибо, и это вполне искренне.