Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zufallsgleitkommazahlen mit zufälligen Nachkommastellen (https://www.delphipraxis.net/117255-zufallsgleitkommazahlen-mit-zufaelligen-nachkommastellen.html)

sx2008 15. Jul 2008 01:20

Re: Zufallsgleitkommazahlen mit zufälligen Nachkommastellen
 
Wenn man die Random() Funktion ohne Parameter aufruft, bekommt man Zufallszahlen zwischen 0.0 und 1.0.
Random() ist überladen - siehe OH.
Man muss diesen Wertebereich nur noch verschieben und skalieren.

Chemiker 15. Jul 2008 07:02

Re: Zufallsgleitkommazahlen mit zufälligen Nachkommastellen
 
Hallo,

@sx2008: Das die Random() Function überladen ist, ist mir bekannt, allerdings wenn man einen Werte-Bereich angibt werden nur Interger-Zahlen zurückgegeben.

@Medium: Danke erst mal für ausführliche Informationen. Die erste Funktion müsste nur geändert werden um die Nachkomma-Stellen als Integer zu bekommen.

Geändert:

Delphi-Quellcode:
function dZufallsZahlen(Von, Bis: Integer): Double;
var
  KommaStellen: Integer;
begin
  KommaStellen := trunc(Power(10, random(8))*10);
  Result := iZufallsZahlen(Von*KommaStellen, bis*KommaStellen)/KommaStellen;
end;
Nach einem kurzen Test funktioniert sie wunschgemäß.
Es sollen Zahlen zwischen -1000 und 100000 generiert werden, da sollte der Werte-Bereich noch funktionieren.

Der String der erstellt wird von der Zufallszahl soll unterschiedliche Länge haben und nicht mit Nullen aufgefüllt werden.

Zitat:

Alles andere wäre Rumgehackel und bestenfalls ein "dirty trick", aber nichts zum vorm Chef damit glänzen
Beim Programmieren bin ich mein eigener Chef.

Bis bald Chemiker

sx2008 15. Jul 2008 21:23

Re: Zufallsgleitkommazahlen mit zufälligen Nachkommastellen
 
Zitat:

Zitat von Chemiker
@sx2008: Das die Random() Function überladen ist, ist mir bekannt, allerdings wenn man einen Werte-Bereich angibt werden nur Interger-Zahlen zurückgegeben.

Ja, aber überleg doch mal - so bekommt man blitzsaubere Zufallsszahlen als double im Bereich zwischen Von und Bis:
Delphi-Quellcode:
function dZufallsZahl(Von, Bis: Double): Double;
begin
  Result := (Bis-Von)*Random + Von;
end;

Chemiker 15. Jul 2008 21:40

Re: Zufallsgleitkommazahlen mit zufälligen Nachkommastellen
 
Hallo sx2008,

die Zufallszahlen waren nicht das Problem sondern, die variablen Kommastellen.

Prüfe mal Deine Funktion mit den Werten: von: 0.00001 bis: 0.00002 dann wirst Du sehen das der Bereich nicht mehr eingehalten wird.
Medium hat die Erklärung dafür gegeben.

Bis bald Chemiker

sx2008 15. Jul 2008 22:05

Re: Zufallsgleitkommazahlen mit zufälligen Nachkommastellen
 
Zitat:

Zitat von Chemiker
die Zufallszahlen waren nicht das Problem sondern, die variablen Kommastellen.

Diese seltsame Bedingung, dass die Anzahl der Nachkommastellen zwischen 0 und 8 liegen soll wiederspricht doch gleichverteilten Zufallszahlen.
Zwischen 0 und 1 gibt es genau 8 Werte, die genau eine Nachkommastelle haben.
Es gibt 90 Werte, die 2 NKs haben, es gibt 900 Werte mit 3 NKs,...
Ein echte Zufallszahl wird mit sehr hoher Wahrscheinlichkeit sehr viele Nachkommastellen haben.
Zwischen zwei Zahlen, egal wie eng sie beieinander liegen, sind unendlich viele Zahlen dazwischen.

Man darf Zufallszahlen auf eine bestimmte Anzahl Nachkommastellen runden und es bleiben immer noch gleichverteilte Zufallszahlen.
Wenn man aber aber wie oben versucht die NKs so zu beeinflussen, dass sie zwischen 0 und 8 liegen,
dann hat das mathematisch nicht mehr viel mit Zufallszahlen zu tun.
Insbesondere ist die Gleichverteilung gestört.

Chemiker 15. Jul 2008 22:51

Re: Zufallsgleitkommazahlen mit zufälligen Nachkommastellen
 
Hallo sx2008,

im Grunde genommen werden die Zufallszahlen ab einer zufällig gewählten Stelle abgeschnitten, die Zufallszahlen werden ja bei der Entstehung nicht beeinflusst.
Die Zahlen sollen zwischen -1000 und 100000 liegen.
Die gleichmäßige Wahrscheinlichkeit ist nicht so wichtig, wobei auch bei den Nachkommastellen eine zufällige Verteilung besteht.
Ich bin sowieso der Meinung, dass man mit einem Rechner keine echten Zufallszahlen generieren kann.

Bis bald Chemiker

alzaimar 16. Jul 2008 06:50

Re: Zufallsgleitkommazahlen mit zufälligen Nachkommastellen
 
Zitat:

Zitat von Chemiker
Ich bin sowieso der Meinung, dass man mit einem Rechner keine echten Zufallszahlen generieren kann.

Na ja, dürfte schon gehen, aber das will ja k(aum)einer. Wir wollen Pseudo-Zufallszahlen, die aber eben gleichverteilt sind. Und, wenns geht, unvorhersehbar. Bei einer Monte-Carlo-Simulation ist das 'unvorhersehbar' egal, aber bei der Kryptographie nicht.

Chemiker 16. Jul 2008 18:57

Re: Zufallsgleitkommazahlen mit zufälligen Nachkommastellen
 
Hallo alzaimar,

die Zufallszahlen werden für eine Simulation gebraucht. Random() ist nicht für Kryptographie geeignet, laut der Delphi-Hilfe. Zudem würden meine bescheiden Mathematischen Kenntnisse für Kryptographie nicht ausreichen.

Bis bald Chemiker


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:28 Uhr.
Seite 2 von 2     12   

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