GSL Minimalbeispiel
-
Okay Leute,
nach der Diskussion in den anderen beiden Thread hier und dort mal ein Minimalbeispiel zum Arbeiten.
Ziel ist es jetzt eine Routine zur Verfügung zu haben, um eine Zufallszahl zu erhalten.
Das ganze ist in der GSL im Handbuch erklärt.Also was habe ich gemacht.
Zunächst habe ich eine header Datei für die Deklaration erstellt:
rng.hdouble get_random_number();Dann das ganze in eine cpp-Datei eingebunden:
rng.cppdouble get_random_number() { const gsl_rng_type* T; gsl_rng* r; gsl_rng_env_setup(); T = gsl_rng_default; r = gsl_rng_alloc (T); return gsl_rng_uniform (r); gsl_rng_free (r); }Schließlich habe ich das ganze in ein Hauptprogramm eingebunden, worin ich schließlich eine Zufallszahl verwenden möchte:
main.cpp#include<iostream> #include<stdio.h> // GSL #include</usr/local/include/gsl/gsl_rng.h> // personal header files #include "rng.h" #include "rng.cpp" using namespace std; int main(){// cout << "Random number in [0,1[ : " << get_random_number() << endl; return 0; }Anschließend das ganze kompiliert und gelinkt, wenn ich das richtig verstanden habe:
g++ -Wall -pedantic -ansi -I/usr/local/include/gsl -c main.cpp g++ -L/usr/local/lib -o main main.o -lgsl -lgslcblas -lmUnd das ganze liefert schließlich:
:~/GSL/Cpp$ ./main Random number in [0,1[ : 0.999742So, habe ich das jetzt insgesamt richtig gemacht? Also richtig aufgeteilt?
Ich meine die Tatsache das es funktioniert ist ja noch kein vollständiger Garant dafür, dass es nicht vielleicht Zufall ist.

Gruß,
Klaus.
-
#include</usr/local/include/gsl/gsl_rng.h>Wie bereits in dem anderen Thread angemerkt, solltest du niemals absolute Pfade in include-Anweisungen benutzen. Du benutzt ja schon die -I-Option um dem Compiler zu sagen, wo er die Header finden kann.
Du hast vergessen rng.cpp zu kompilieren und zu linken!
Und du solltest dir angewöhnen deinen Code einzurücken. Alles in eine Spalte zu schreiben wird sehr schnell unleserlich.
-
Hi,
rüdiger schrieb:
Du hast vergessen rng.cpp zu kompilieren und zu linken!
Das hat mich auch ein wenig gewundert, denn Bashar hatte schon hier geschrieben, dass die Dateien einzeln kompiliert werden.
Aber warum funktioniert es dann? Ich kompiliere nur main.cpp und nicht die enthaltende rng.cpp vorher.

Gruß,
Klaus.