AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

zufallszeit generieren

Ein Thema von r_amse_s · begonnen am 31. Mai 2009 · letzter Beitrag vom 31. Mai 2009
Antwort Antwort
r_amse_s

Registriert seit: 31. Jul 2004
107 Beiträge
 
Delphi 11 Alexandria
 
#1

zufallszeit generieren

  Alt 31. Mai 2009, 17:48
hallo,

gibt es einen eleganten algorithmus, welches mir erlaubt floatzahlen 0 <= zahl < 1 in einem bereich generieren zu lassen?

z.b. zw. 0,32653 und 0,65380

...das natürlich ohne zu prüfen, ob die per random function erzeugte zahl im bereich liegt und wenn nicht dann erneut generieren.

ich suche also nach einer function random(low, high: double): double; die mir gleich aus dem bereich einen wert generiert.

habe was hier gefunden aber leider in C

Delphi-Quellcode:
double randDouble(double low, double high)
{
double temp;

/* swap low & high around if the user makes no sense */
if (low > high)
{
temp = low;
low = high;
high = temp;
}


/* calculate the random number & return it */
temp = (rand() / (static_cast<double>(RAND_MAX) + 1.0))
* (high - low) + low;
return temp;
}
liebe Grüße
ramsi
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: zufallszeit generieren

  Alt 31. Mai 2009, 17:51
Einfach normales Random() in angepassten Bereich ( 0, high-low). und dann low dazuzählen()
Markus Kinzler
  Mit Zitat antworten Zitat
r_amse_s

Registriert seit: 31. Jul 2004
107 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: zufallszeit generieren

  Alt 31. Mai 2009, 18:20
random akzeptiert aber nur einen und nur integer parameter...oder verstehe ich das falsch?
liebe Grüße
ramsi
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: zufallszeit generieren

  Alt 31. Mai 2009, 18:24
Random geht immer von 0 bis einem Wert. Wenn Wert nun High-Low ist entspricht der dann High bis low.
Aber der Bereich muss ganzzahlig sein.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: zufallszeit generieren

  Alt 31. Mai 2009, 18:29
Nur als Anregung wie man es machen könnte. Ob das sinnvoll ist, sei mal dahingestellt.

Zitat von r_amse_s:
z.b. zw. 0,32653 und 0,65380
- Ermittlung einer Zufallszahl zwischen 32653 und 65830 mittels Random()
- Zahl durch 100.000 teilen
- ggf. Offset aufaddieren (im Beispiel nicht nötig)

Den Divisor kannst du natürlich in deiner Funktion der zahl anpassen.

Grüße, Matze
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#6

Re: zufallszeit generieren

  Alt 31. Mai 2009, 18:33
ja also wie die beiden Vorposter geschrieben haben mit Intergerwert arbeiten, der anschließend dividiert wird.

Hab mal versuchtt den C-Code zu übersetzen, ist ja nicht so schwer. Rand_Max musste ich schätzen
Delphi-Quellcode:
function RandomDouble(loDouble, hiDouble: Double): Double;
var
  temp : Double;
begin
  // swap low & high around if the user makes no sense
  if (loDouble > hiDouble) then begin
    temp := loDouble;
    loDouble := hiDouble;
    hiDouble := temp;
  end;

  // calculate the random number & return it
  Result := (Random / 0.999999999999999999) *
          (hiDouble - loDouble) + loDouble;
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.100 Beiträge
 
Delphi 12 Athens
 
#7

Re: zufallszeit generieren

  Alt 31. Mai 2009, 18:34
Kurz und Knapp:
r := Random * (rHigh - rLow) + rLow [add]
Delphi-Quellcode:
function RandomDouble(loDouble, hiDouble: Double): Double;
begin
  if loDouble > hiDouble then
       Result := Random * (loDouble - hiDouble) + hiDouble
  else Result := Random * (hiDouble - loDouble) + loDouble;
end;
[add2]
wobei es doch mathematisch egal sein sollte und demnach das reichen dürfe
Delphi-Quellcode:
function RandomDouble(loDouble, hiDouble: Double): Double;
begin
  Result := Random * (hiDouble - loDouble) + loDouble;
end;
also ob von der Größten abgezogen würde oder zur Kleinen dazuadiert ... müßte auf's Selbe Gleiche rauskommen .

[add3]
also nicht das selbe Rechenergebnis, aber der selbe Zahlenbereich und da das Ergebnis eh "Zufall" ist, ist es ja egal, ob da was anderes bei rauskommt

[add4]
für
loDouble <= Result < hiDouble
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#8

Re: zufallszeit generieren

  Alt 31. Mai 2009, 18:44
Alles funktioniert, jetzt auch die C-Übersetzung (wobei da das / 0.999... dank Random-Bereich in Delphi unnötig ist?).

Aber das letzte Delphi-Beispiel ist natürlich schön kompakt... für den Einzeiler könnte man glatt den Prozedur-Aufruf sparen.
  Mit Zitat antworten Zitat
r_amse_s

Registriert seit: 31. Jul 2004
107 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: zufallszeit generieren

  Alt 31. Mai 2009, 19:02
danke!
einfach perfekt

Zitat:
r := Random * (rHigh - rLow) + rLow
liebe Grüße
ramsi
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz