Wie fülle ich ein array mit zufälligen Gleitkommazahlen?
Ich bin der Hoffnung, einen Weg zu finden, füllen Sie ein array mit zufälligen Gleitkommazahlen. Mein array ist in Größe 50 und ich bin der Hoffnung, diese zu füllen array mit random float-zahlen aus dem Bereich 1 bis 25. Hier ist was ich habe, so weit. Ich bin sehr dankbar für Tipps oder Antworten, die jemand bieten kann. Danke.
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
float myArray[50];
for(int i = 1; i <= 25; i++)
{
srand(time(0));
myArray[i] = (rand()% 50 + 1);
cout << myArray[i] << endl;
system("Pause");
return 0;
}
}
Klassen aus
Tun Sie nicht
Sie sind zurzeit nur die Hälfte-füllen Sie Ihre array - ich muss gehen bis zu 50 und Ihre E-Modul werden muss 25.
<random>
.Tun Sie nicht
srand
in der Schleife der Zeit werden die gleichen sein, zumindest zwischen einigen der Anrufe.Sie sind zurzeit nur die Hälfte-füllen Sie Ihre array - ich muss gehen bis zu 50 und Ihre E-Modul werden muss 25.
InformationsquelleAutor stackexchange12 | 2013-09-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn C++11 ist nicht eine option, können Sie einfach
rand
auf, teilt deren Ergebnis durch dieRAND_MAX
ständige gegossen zufloat
zu erhalten, eine gleichmäßige Verteilung der Wagen in den Bereich [0, 1]; dann können Sie vermehren es durch 24 und 1 hinzufügen, um Ihren gewünschten Bereich:Durch die Art und Weise, wie von anderen beobachtet, verschieben
srand
aus der Schleife - der RNG-seed (in der Regel) initialisiert werden muss nur einmal.(beachten Sie, dass die Division durch
RAND_MAX
geben wird, eine Verteilung, die umfasst die rechts extremen Ihr Intervall; wenn Sie ausschließen wollen, sollten Sie teilen, indem Sie z.B.RAND_MAX+1
)Natürlich, die daraus resultierende Verteilung ist nur so gut wie das original
rand()
Verteilung (sowohl in der Zufälligkeit und im Granularität); Sie erhalten in der Regel eine LCG und Granularität von mindestens ~0.0007 (garantiert durch die Norm, und, was VC++ und andere Compiler eigentlich auch). Wenn Sie eine bessere Zufallszahlen, sollten Sie die Hinweise gepostet, die in den anderen Antworten (die Standard-Mersenne-twister-generator in C++11 bietet eine bessere Zufälligkeit und einen Weg größere garantierte Reichweite).InformationsquelleAutor Matteo Italia
Wenn C++11 eine option ist, würde ich die random Kopf-und uniform_real_distribution:
Warum machen die Leute sagen, es ist die modulo-bias bei Verwendung eines random number generator? erklärt, warum die naive Verwendung der E-Modul mit
rand()
verursacht Verzerrungen in der Verteilung und wie es zu vermeiden.Ihr willkommen, es gibt eine Menge zu lernen. In der langfristigen beachten Sie, dass die Verwendung der
random
header ist der richtige Weg zu gehen.InformationsquelleAutor Shafik Yaghmour
InformationsquelleAutor Benjamin Lindley
Jedes mal, wenn die for-Schleife iteriert, so weist es einen Wert im array eine Zufallszahl. Da dein array mit Größe 50, die Sie Durchlaufen 50-mal statt 25, wie Sie es jetzt tun.
Array-Grenzen bei 0 beginnen, so können Sie nur auf von array[0] array[49].
Bekommen eine zufällige Zahl zwischen 1-25, Sie wollen
Außerdem wollen Sie Ganzzahlen oder Fließkomma-Zufallszahlen? Jetzt sind Sie nur immer auf ganze zahlen, meaing 1, 2, 3, ... 25. Wenn Sie wollen, so etwas wie 2.45, 6.883, 23.999, etc. Sie brauchen etwas anderes zu tun. Sehen C++ random float-Zahl generation für die Antwort.
Werden Sie wahrscheinlich nicht wollen, zu unterbrechen, jedes mal, wenn Sie legen Sie eine Zahl in das array. Bewegen Sie diesen nach der for-Schleife.
Auch, wenn Sie
return 0
innerhalb der for-Schleife, Sie wird nur weisen Sie eine Nummer, bevor Sie Ihr Programm beenden. Bewegen, um nach der Schleife auch.InformationsquelleAutor Chrom
Verwenden uniform_real. In der folgenden Programm-random float-zahlen zwischen 1,0 und 2,0 generiert:
InformationsquelleAutor cpp