Χρήση της rand

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
tasosatha
Δημοσιεύσεις: 37
Εγγραφή: 27 Δεκ 2010 17:16

Χρήση της rand

Δημοσίευση από tasosatha » 10 Ιούλ 2012 16:34

Γεια σας εχω κολλησει στην υλοποιηση μιας συναρτησης που να επιστρεφει τυχαιες τιμες σε ενα διαστημα [α,β]. Εχω δηλωσει την εξης συναρτηση: float random(float a, float b) αλλα δυσκολευομαι γιατι οι τιμες ειναι float.

γενικοτερα εχω δει ενα παραδειγμα για αυτη την υλοποιηση αλλα και παλι δυσκολευομαι. Το παραδειγμα ειναι:
Για να κανουμε float την rand: στο [0,RANGE]
A. το παμε στο [0,1] rand/((float)RAND_MAX)
B. πολλαπλασιαζουμε ολο το Α*range(high-low)

Παιδια οποιος μπορει ας με βοηθησει...

Άβαταρ μέλους
xmavidis
Honorary Member
Δημοσιεύσεις: 1217
Εγγραφή: 02 Δεκ 2003 19:59
Τοποθεσία: Ηράκλειο

Χρήση της rand

Δημοσίευση από xmavidis » 10 Ιούλ 2012 18:13

Η μικρότερη τιμή είναι η α στο [α,β]. Πες πώς έχεις από την rand() μια τιμή στο [0,1].
Τότε πρέπει να κάνεις map το 0 στο α και το β στο 1.
Υποθέτουμε λοιπόν ότι έχουμε έναν γραμμικό μετασχηματισμό από το [0,1] στο [α,β].

f(x) = c + d*x

Όπου x = rand()/RAND_MAX και c και d δύο σταθερές που πρέπει να προσδιοριστούν.

Για x=0, πρέπει να επιστρέψει το α.
f(x=0) = c
Όμως είπαμε ότι για x=0 θέλουμε να επιστρέψει την τιμή α, οπότε c = α.

Αν x= 1 ( f(x=1)= b):
f(x=1) = β = α + d*1 = α + d => d = β-α

Κώδικας: Επιλογή όλων

float newRand(float a, float b) {
     // x in [0,1]
    float x = rand()/RAND_MAX;

   // Random number in [a,b]: 
  // If x = 1 => number = a + b -a = b 
  float number = a + (b-a)*x;

  return number;
}
I want to know God’s thoughts; the rest are details.
Albert Einstein

tasosatha
Δημοσιεύσεις: 37
Εγγραφή: 27 Δεκ 2010 17:16

Χρήση της rand

Δημοσίευση από tasosatha » 11 Ιούλ 2012 13:58

Σε ευχαριστω πολυ για την βοηθεια. Το εκανα οπως μου εδειξες και τελειωσα το προγραμμα μου αλλα οταν το κανω gcc με το cygwin μου βγαζει αυτο το μηνυμα:

fulladio1-askisi0.c:5:7: σφάλμα: conflicting types for ‘random’
/usr/include/cygwin/stdlib.h:29:6: σημείωση: previous declaration of ‘random’ was here

στις γραμμες αυτες εχω την συναρτηση:

float random(float a, float b){
float x,number;
x=rand()/RAND_MAX;
number=a+(b-a)*x;
return number;
}

τι να φταιει στο προγραμμα?

Άβαταρ μέλους
xmavidis
Honorary Member
Δημοσιεύσεις: 1217
Εγγραφή: 02 Δεκ 2003 19:59
Τοποθεσία: Ηράκλειο

Χρήση της rand

Δημοσίευση από xmavidis » 11 Ιούλ 2012 14:00

Άλλαξε το όνομα της συνάρτησης σου σε κάτι άλλο εκτός από random. Υπάρχει ήδη μια random που γυρνάει float μέσα στο stdlib.h.
I want to know God’s thoughts; the rest are details.
Albert Einstein

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Χρήση της rand

Δημοσίευση από dva_dev » 11 Ιούλ 2012 14:21

Στο stdlib.h υπάρχει στη γραμμή που σου λέει ήδη δηλωμένη κάποια συνάρτηση με όνομα random όπως και η δικιά σου αλλά με διαφορετική υπογραφή.
Αν αλλάξεις όνομα στη δικιά σου (π.χ. την ονομάσεις myrandom) θα ξεπεράσεις αυτό το πρόβλημα.

tasosatha
Δημοσιεύσεις: 37
Εγγραφή: 27 Δεκ 2010 17:16

Χρήση της rand

Δημοσίευση από tasosatha » 11 Ιούλ 2012 23:43

Ok σας ευχαριστω για την βοηθεια

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες