PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit der <math.h> Funktion exp



suse
28-04-2003, 20:51
Guten Abend....

ist mitsicherheit ein simmples Problem!
Das kleine Programm soll mir die Exponentialfunktion von a ausgeben...



#include <stdio.h>

// Funktionen Deklaration
double exp (double);

// Das Hauptprogramm
main()
{
// Variablen Deklaration: a = 0, ea ist das Ergebnis von exp(a)

double a =1;
double ea;

ea= exp(a);
printf("\n Die Exponentialfunktion bei %g hat den Wert %g.\n\n", a, ea);

return 0;
}


Dabei kommt folgende Meldung;

/tmp/cckFnbYl.o: In function `main':
/tmp/cckFnbYl.o(.text+0x21): undefined reference to `exp'
collect2: ld returned 1 exit status

Könntet Ihr mir vielleicht helfen?

gruss
suse

arthur
28-04-2003, 20:56
hi,

also einmal fehlt der include <math.h>,
und dann kann sein dass du beim compilieren(linken) explizit -lm
angeben musst.

gruss
Arthur

bischi
28-04-2003, 20:59
Meine Frage: Musst du

double exp (double)

wirklich definieren? Gibt es da nischt eine Standardversion? (könnte sein, dass es an dem liegt...?)

Und noch was: Wenn du im Forum etwas postest, dann gib doch bitte gleich im "Betreff" an, um was für eine Sprache es sich handelt, sonst müssen es auch alle die lesen, die überhaupt keine Ahnung haben...;)

MfG Bischi

PS: Ich habe schon richtig geraten, dass es sich hier um C++ handelt?!

bischi
28-04-2003, 21:01
Stimmt, <math.h> fehlt wirklich! Da hat doch noch einer einen Beitrag dazwischengeschoben, als ich am schreiben war! :eek:

PS: Willst du nicht lieber Java lernen? :confused:

suse
28-04-2003, 21:10
Joo danke für denn Hinweiss..
Wie würde das denn in C aussehen?
Könntet ihr mir das mal sagen.... wäre echt noch nett!

gruss
suse

arthur
28-04-2003, 21:25
die deklaration von exp ist durch das includieren von math.h
völlig überflüssig.
und dein proggie ist 100% C.

gruss
Arthur

suse
28-04-2003, 21:35
Nein nein so einfach ist es nicht Artur....
Ich habe folgendes gemacht....



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

main()
{
double ege;

double exp (double a)
{
a = 2;
ege = exp(a);
}
printf("\nErgbnis ist %lg\n",ege);
}


e2 ist aber nicht -1,999809
Weisst du vielleicht was ich falsch mache...

gruss
suse

arthur
28-04-2003, 22:23
sorry aber das program wie du es geschrieben hast
kann nicht laufen.
so sollte es aussehen:


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

int main()
{
double ege;
ege = exp(2);
printf("\nErgbnis ist %lg\n",ege);
return 0;
}



gruss
Arthur

suse
28-04-2003, 22:33
Danke...

aber ich würde es gerne in C haben....?
Wie sieht es damit aus...
In C lautet der Prototyp double exp (double x);

Also muss es doch so aussehen oder...


double exp (double vaule)
{
//das ist jetzt meine frage?
//Was hier rein muss??
}


gruss
suse

anda_skoa
28-04-2003, 23:13
Original geschrieben von suse
Danke...

aber ich würde es gerne in C haben....?


arthurs Lösung ist in C

Ciao,
_

suse
28-04-2003, 23:22
Wenn ich sie aber als eine C Programm compeliere tauchen aber leider fehler auf also kann es dann kein C Programm sein oder...
Probiert es doch mal aus mit gcc.

gruss
suse

bischi
29-04-2003, 07:09
Also ich habe nochmals in meiner Referenz nachgeschaut und da ist

double exp(double arg)
eindeutig C (und nicht C++)!

Auch die Funktion

printf()
ist laut meiner Referenz eine C Funktion. Somit ist Arthurs Programm wirklich in C! Vielleicht musst du deinen Compiler anders einstellen (keine Ahnung wie) oder die viel einfachere Lösung: Du must statt C einfach Java lernen (hat ausser dass es langsamer ist nur Vorteile :p ).

MfG Bischi

arthur
29-04-2003, 08:45
Hi,
es wäre vielleich hilfreich zu erfahren was du zum compilieren
benutzt: platform, compiler, version.

gruss
Arthur

anda_skoa
29-04-2003, 09:19
Original geschrieben von suse
Wenn ich sie aber als eine C Programm compeliere tauchen aber leider fehler auf also kann es dann kein C Programm sein oder...
Probiert es doch mal aus mit gcc.


Geht einwandfrei, nicht die kleinste Warning, selbst bei -Wall

Ich denke das könnte man sogar mit -ansi und -pedantic kompilieren :)

Wie arthur schon gefragt hat:
Plattform, Compiler, Version?
Compilercommando?

Hier getestet unter
RH 7.3, gcc 2.96 mit
#> gcc -Wall -o exptest exptest.c -lm

Ciao,
_

suse
29-04-2003, 14:20
Vielen Dank für eure hilfe!
Es lag am Compiler, ich benutzte schoon immer den gcc (mit dem hatte ich bisher noch keine Probleme) und habe ganz vergessen das ich auch noch denn g++ habe der ja auch C Programe compeliert!
Aber vielen Dank noch mal....
Und was Java angeht, da bin ich mir noch nicht so sicher...Vielleicht werde ich es mal Probieren! :)

gruss
suse

anda_skoa
29-04-2003, 16:50
g++ braucht man aber erst für C++.
Theoretisch nicht mal da unbedingt.

Es muss auf jeden Fall mit dem gcc gehen, das war sauberer C Code.

Am wahrscheinlichsten hast du das -lm vergessen und dann einen Linkerfehler bekommen.
Sowas wie "undefinded reference"

Ciao,
_

suse
29-04-2003, 17:46
Ja da hast du recht...
Ich habe aber bisher immer so übersetzt..

gcc -o datei datei.c

Ich habe einfach noch keine Links gesetzt...

gruss
suse

arthur
29-04-2003, 18:00
also so wie ich es mir schon am anfang dachte :)
zu erklärung:
komischerweise muss man unter gcc die math bibliothek beim kompilieren(linken)
mitangeben, das geht durch den paramater -lm. (m ist der name der library)
damit wird die bibliothek libm.so mit deinem programm gelinkt.
dort ist auch die exp funktion definiert.

gruss
Arthur

suse
29-04-2003, 18:52
Vielen Dank für die Info....

gruss
suse