Jan-Michael
Aktives Mitglied
Thread Starter
- Dabei seit
- 28.02.2005
- Beiträge
- 397
- Reaktionspunkte
- 0
Erstmal hallo an alle Macuser!!
Die letzten Tage habe ich an meinem Mac verzweifelt versucht in C/C++ eine Zufallsfunktion zu implementieren. Nachdem ich zuerst versucht habe mein Problem(Berechnung von Flächeninhalten mit Stochastik) in C mit dem folgenden Listing zu lösen:
#include <stdio.h>
#include<time.h>
#include<unistd.h>
#include<stdlib.h>
int main() {
double x_double=0, y_double=0;
double punkt=0, innen=0;
double c=175, d=175, r=125;
srand((unsigned)time(NULL) + getpid());
for(int i=0; i<6000; i++) {
x_double=50+(rand()%300);
y_double=50+(rand()%300);
if(y_double<(double)(sqrt((-x_double*x_double)+2*c*x_double-(c*c)+(r*r))+d) && y_double>(double)(d-sqrt((-x_double*x_double)+2*c*x_double-(c*c)+(r*r)))) {
innen++;
}
punkt++;
}
printf("Insgesamt: " + punkt + " Punkte" + "\n");
printf("Davon " + innen + " innerhalb des Kreises" + "\n");
printf(" " + (punkt-innen) + " au§erhalb des Kreises" + "\n");
printf( "Das Quadrat hat eine Fläche von 300PX*300PX = " + (300*300) + " Pixeln" + "\n");
printf("Nach der obigen Verteilung hat der Kreis eine Fl·che von " + (((300*300)/punkt)*innen) + " Pixeln" + "\n");
}
musste ich jedoch später feststellen, dass die C-Funktionen srand() und rand() nicht den gewünschten Erfolg brachten(nur Pseudozufallsfunktion wie ich in Kernigan und Richies C-Dokumentation nachgelesen habe, die nur unzureichen Zufall berechnen können), den ich mir eigendlich erhoffte hatte. Das Programm gibt an, dass die Fläche des zu berechnenden Kreises(siehe nach y aufgelöste Kreisgleichung innerhalb der if()-Bedingung) halb so groß ist, wie die des umschließenden Quadrates(siehe Einschränkung der Funktion rand() auf eine Fläche 250*250 Pixel). Eine Portierung in Java, in der ich die Funktion Math.random() verwendet habe gibt das Richtige Ergebnis(soweit bei Stochastik von Richtig oder Falsch geredet werden kann) aus. Wie kann ich das Problem in C/C++ lösen? Bitte schreibt mir Vorschläge zu Zufallsfunktionen/anderen Möglichkeiten Zufall in C oder C++ zu berechnen.
PS: Für C++ habe ich keine Zufallsfunktion gefunden, die in der C++ Bibliothek definiert ist. Vielleicht ist das die Funktion, die ich Suche.
Die letzten Tage habe ich an meinem Mac verzweifelt versucht in C/C++ eine Zufallsfunktion zu implementieren. Nachdem ich zuerst versucht habe mein Problem(Berechnung von Flächeninhalten mit Stochastik) in C mit dem folgenden Listing zu lösen:
#include <stdio.h>
#include<time.h>
#include<unistd.h>
#include<stdlib.h>
int main() {
double x_double=0, y_double=0;
double punkt=0, innen=0;
double c=175, d=175, r=125;
srand((unsigned)time(NULL) + getpid());
for(int i=0; i<6000; i++) {
x_double=50+(rand()%300);
y_double=50+(rand()%300);
if(y_double<(double)(sqrt((-x_double*x_double)+2*c*x_double-(c*c)+(r*r))+d) && y_double>(double)(d-sqrt((-x_double*x_double)+2*c*x_double-(c*c)+(r*r)))) {
innen++;
}
punkt++;
}
printf("Insgesamt: " + punkt + " Punkte" + "\n");
printf("Davon " + innen + " innerhalb des Kreises" + "\n");
printf(" " + (punkt-innen) + " au§erhalb des Kreises" + "\n");
printf( "Das Quadrat hat eine Fläche von 300PX*300PX = " + (300*300) + " Pixeln" + "\n");
printf("Nach der obigen Verteilung hat der Kreis eine Fl·che von " + (((300*300)/punkt)*innen) + " Pixeln" + "\n");
}
musste ich jedoch später feststellen, dass die C-Funktionen srand() und rand() nicht den gewünschten Erfolg brachten(nur Pseudozufallsfunktion wie ich in Kernigan und Richies C-Dokumentation nachgelesen habe, die nur unzureichen Zufall berechnen können), den ich mir eigendlich erhoffte hatte. Das Programm gibt an, dass die Fläche des zu berechnenden Kreises(siehe nach y aufgelöste Kreisgleichung innerhalb der if()-Bedingung) halb so groß ist, wie die des umschließenden Quadrates(siehe Einschränkung der Funktion rand() auf eine Fläche 250*250 Pixel). Eine Portierung in Java, in der ich die Funktion Math.random() verwendet habe gibt das Richtige Ergebnis(soweit bei Stochastik von Richtig oder Falsch geredet werden kann) aus. Wie kann ich das Problem in C/C++ lösen? Bitte schreibt mir Vorschläge zu Zufallsfunktionen/anderen Möglichkeiten Zufall in C oder C++ zu berechnen.
PS: Für C++ habe ich keine Zufallsfunktion gefunden, die in der C++ Bibliothek definiert ist. Vielleicht ist das die Funktion, die ich Suche.
Zuletzt bearbeitet: