Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

h2o202

Frischling

  • »h2o202« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Rodgau

  • Private Nachricht senden

1

12.01.2007, 18:52

zufallszahl >0 && zufallszahl < 1

Moin Moin,

ich wollte mal fragen wie ich in C++ eine Zufallszahl bekommen kann die größer als 0 aber kleiner als 1 ist. Zufallszahlen in einem bestimmten Bereich sind ja kein Problem (wozu gibts Modulo) aber was ich brauche ist eine Kommazahl z.B. 0,123 oder 0,482 usw.

Ich habe lähmlich (wer lähmlich mit ä schreibt ist dämlich, aber wie schreibt mans denn richtig?) einen Code in Java mit einer math.random() Funktion und kenne kein passendes gegenstück in C++.

Wäre für Hilfe echt dankbar ;)

ps. und wenn jemand weis wie man lähmlich schreibt darf der sich auch melden :roll:

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

2

12.01.2007, 19:13

nämlich ohne h -.-
es heißt nämlich auch wer nämlich mit h schreibt is dämlich :P

Zu deiner Frage: Schau mal in der Hilfe nach rand()
btw: Wie kriegt man mit der Modulo Funktion Zufallszahlen?¿

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

3

12.01.2007, 19:14

Einfach den Zufallswert durch den maximalen Zufallswert teilen. Hab schon öfter was von RAND_MAX oder so gehört, hab aber grad nicht im Kopf, wie es genau heißt oder welcher Wert dahinter steht (ca. 32000)


Zitat

Ich habe lähmlich (wer lähmlich mit ä schreibt ist dämlich, aber wie schreibt mans denn richtig?)

Der Spruch heißt: wer nämlich mit h schreibt ist dämlich :roll:

// mist, zu spät^^

h2o202

Frischling

  • »h2o202« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Rodgau

  • Private Nachricht senden

4

12.01.2007, 19:17

also wenn du eine zufalszahl zwichen 1 und 10 haben willst machst du folgendes:

C-/C++-Quelltext

1
zahl= (rand() % 10 + 1)


das meine ich damit

dass hilft mir aber auch herzlich wenig wenn ich kommazahlen brauche weil rand nur ganzzahlen hergibt :(

h2o202

Frischling

  • »h2o202« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Rodgau

  • Private Nachricht senden

5

12.01.2007, 19:24

also der maximale wert den rand() zurückgibt ist 32767 dass entspricht lämlich(ohne h :D) einem Byte also binär 1111 1111 ^^

und die idee mit dem teilen ist nicht schlecht dann hab ich ne kommazahl und kann mit %1 auf kleiner als 1 beschränken. ich muss nur aufpassen dass ich nicht auf 0 komme aber dass ist kein problem ;)

ich erzähl euch dann mal obs klappt. aber erst morgen weil jetzt muss ich zum Stammtisch :roll:

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

6

12.01.2007, 19:30

Also dann kriegst du die Zufallszahl aber auch über rand() nicht über die Modulo Funktion^^

C-/C++-Quelltext

1
double a = static_cast<double>(rand()) / static_cast<double>(32767);

Das sollte dir eine Zufallszahl zwischen 0 und 1 liefern. Idealerweise ersetzt du den Teiler durch die Konstante die es herauszufinden gilt ;)

7

12.01.2007, 19:37

Hey

Der Wert von 1111 1111 liegt meiner Meinung nach bei 2^8=256

dann einfach wie rewb0rn beschrieben berechnen: Einfach die Zufallszahl durch den Maximalwert dividieren!

mfg Markus

Stefan

Alter Hase

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

8

12.01.2007, 20:27

hm, kannst du nicht einfach eine Zufallszahl von z.B 0-1000 machen und die Zahl dann einfach hinter das Komma stellen, also zB bekommst zu 675 als Zufallszahl geliefert und fügst dann vorne 0. ein, so das sich 0.675 ergibt?


cya,
Stefan

FlyingDragon

Frischling

Beiträge: 38

Wohnort: Sachsen

Beruf: Consultant / Software Architekt

  • Private Nachricht senden

9

12.01.2007, 23:18

So kannst du es machen:

C-/C++-Quelltext

1
2
3
4
inline float randf()
{
    return static_cast<float>(rand()) / static_cast<float>(RAND_MAX);
}
Achtung! Das Lesen dieses Beitrags kann Ihnen und den Menschen in ihrer Umgebung erheblichen Schaden zufügen.
___________
Mein Leben, Freunde und die Spieleentwicklung

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

13.01.2007, 01:49

Zitat von »"lannms11"«

Der Wert von 1111 1111 liegt meiner Meinung nach bei 2^8=256

[ ] Du hast das Dualsystem verstanden

Werbeanzeige