Avatar billede mrfunder Nybegynder
15. januar 2005 - 23:22 Der er 10 kommentarer og
1 løsning

En speciel random funktion

Mit problem er at jeg skal have lavet et "tre" cifret tal f.eks 4.52
Altid ét tal, og så to cifre efter mit komma. (men selvfølelig kommer der ikke 2 cifre, hvis mit resultat rammer på præcis 4!)

$status = 1;

Hvis status = 1 skal muligheden stige med 0.50, for hver gang status er én højere skal den stige med 0.50.
Jeg har et tal fra 0 - 5000.


Altså jeg skal bruge en "random-funktion" som giver mig et random tal.
Der er et par ting som skal spille ind.

1. Tallet fra 0 - 5000, hvis tallet er 4000 får jeg selvfølelig et højere tal end var det 200
2. For hver gang status er 1 højere skal muligheden for at tallet blive højere stige med 0.50 (altså ½)
3. Tallet må ikke blive oppe omkring 14 eller sådan noget. Det skal helst holde sig under 7


Forstår i overhovedet hvad det er for en funktion jeg skal have hjælp til!? :P
Avatar billede detox Nybegynder
15. januar 2005 - 23:31 #1
Næ, ærlig talt. Kan du prøve at beskrive det kort og præcist?
Avatar billede arne_v Ekspert
15. januar 2005 - 23:31 #2
Jeg er ikke sikker på at jeg forstår dig, men måske noget a la:

$r = (rand() / getrandmax()) * (1 + $status * 0.5) * ($tal / 5000);
Avatar billede jakoba Nybegynder
15. januar 2005 - 23:31 #3
Ja, men din regel nummer 2 er uklar

2. For hver gang status er 1 højere skal muligheden for at tallet blive højere stige med 0.50 (altså ½)

selv med status==0 er chancen for et tal større end fx 1,50 større end ½, hvis vi lægger ½ til den sandsynlighed er vi bomsikre, så det udtrukne random nummer slet ikke kan være mindre end 7/2 (3,5). er du sikker på det er det du mener ?
Avatar billede mrfunder Nybegynder
15. januar 2005 - 23:35 #4
Der er kun 6 forskellige status'er:
1,2,3,4,5,6. Intet med 0!

1 = 0.5
2 = 1
3 = 1.5
4 = 2
5 = 2.5
6 = 3

Altså hvis status nu er 6, så skal resultatet godt kunne blive 2? Men chancen for at den er større stiger bare med 3.
Avatar billede arne_v Ekspert
15. januar 2005 - 23:36 #5
$r = (rand() / getrandmax()) * ($status * 0.5) * ($tal / 5000);
Avatar billede mrfunder Nybegynder
15. januar 2005 - 23:39 #6
$status = 6;
$tal = 4002;
$r = (rand() / getrandmax()) * (1 + $status * 1.7) * ($tal / 5000);

Det har jeg rettet den til.
Men én lille ting mere :)

Er det muligt at gøre sådan hvis man nu har $tal over 2000, så kommer den ikke under 1. Og tal over 3000 så kommer den ikke under 2. $tal over 4000 kommer dne ikke under 3. Og tal under 5000, så kommer den ikke under 4.. - Håber det kan lade sig gøre :)
Avatar billede arne_v Ekspert
15. januar 2005 - 23:42 #7
Jeg forstår ikke helt de 1.7 men skidt pyt.

(rand() / getrandmax()) vil altid ligge mellem 0.0 og 1.0

du kender selv (1 + $status * 1.7)

så kan du selv justere de 5000 til at give den ønskede opførsel.
Avatar billede mrfunder Nybegynder
16. januar 2005 - 00:05 #8
De 1.7 er bare sådan tallene bliver lidt højere :)
- Er der mulighed for at lægge en "bund" på?

Er det muligt at gøre sådan hvis man nu har $tal over 2000, så kommer den ikke under 1. Og tal over 3000 så kommer den ikke under 2. $tal over 4000 kommer dne ikke under 3. Og tal under 5000, så kommer den ikke under 4.. - Håber det kan lade sig gøre :)
Avatar billede arne_v Ekspert
16. januar 2005 - 00:10 #9
En absolut bund ligger du på med f.eks.:

$r = (rand() / getrandmax()) * (1 + $status * 1.7) * ($tal / 5000) + 0.75;
Avatar billede mrfunder Nybegynder
16. januar 2005 - 00:16 #10
Smid et svar :) Mange tak
Avatar billede arne_v Ekspert
16. januar 2005 - 16:29 #11
mig ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester