Är a ett random number mellan -100 och 100?
Hej jag har en kod och är inte riktigt säker om a är ett tal mellan -100 och 100 eftersom man inte 100% kan kolla det
double r = Math.random();
double x = -100+200*r;
int a = (int) x;
System.out.println(a);
Du kan ju köra tusen gånger och kolla hur ofta varje tal uppträder.
Vill du att -100 och 100 ska vara med? Vet du vad (int) 0.7 blir? Och (int) -0.7? Det påverkar hur det blir när x är nära noll.
okej så 0 uppträder oftare eftersom 0.7 och -0.7 blir både 0. Så hur ska jag då göra för att får ett rand nr mellan -100 0 100 där 100 och -100 är med? ska jag annvända double x = -1+2*r; --> -1<=x<1 och sedan använda det i a men hur ska jag formulera a?
solaris skrev:okej så 0 uppträder oftare eftersom 0.7 och -0.7 blir både 0. Så hur ska jag då göra för att får ett rand nr mellan -100 0 100 där 100 och -100 är med? ska jag annvända double x = -1+2*r; --> -1<=x<1 och sedan använda det i a men hur ska jag formulera a?
Jag föreslår att du lägger till -100 sist, och alltså först gör ett heltal med 0 som minsta värde och 200 som största.
Edit: tillägg: alternativt gör som du gör nu, ungefär, men med 'floor' i stället för (int).
double r = Math.random();
int x = (int)200*r;
int a = x-100;
e det ungefär så du tänkte?
solaris skrev:double r = Math.random();
int x = (int)200*r;
int a = x-100;e det ungefär så du tänkte?
Ja, men jag är inte övertygad om att (int) 200*r är samma sak som (int) (200*r).
Kan du få talet 100 nu?
nej jag antar att jag inte kan få 100 eftersom Math.random(); ger ett tal 0<=r<1 och eftersom det aldrig kan va 1 kan det antagligen inte bli 100 heller. men hur ska jag göra för att får 100 då`?
solaris skrev:nej jag antar att jag inte kan få 100 eftersom Math.random(); ger ett tal 0<=r<1 och eftersom det aldrig kan va 1 kan det antagligen inte bli 100 heller. men hur ska jag göra för att får 100 då`?
Ta lite mer än 200.
Hej!
Om är ett slumptal
så är ett slumptal sådant att
.
Det som inte framgår i uppgiften är om man vill att alla tal ska vara lika sannolika att genereras?
Om så är fallet så ska vi sätta upp slumpvariabeln:
där där
Är det ovanstående som efterfrågas skulle jag personligen hellre använda funktionen ceil eller floor. Blir lite tydligare då.
Laguna skrev:solaris skrev:nej jag antar att jag inte kan få 100 eftersom Math.random(); ger ett tal 0<=r<1 och eftersom det aldrig kan va 1 kan det antagligen inte bli 100 heller. men hur ska jag göra för att får 100 då`?
Ta lite mer än 200.
Då borde det här funka ..?
Postad: 1 timme sedan
double r = Math.random();
int x = (int)(201*r);
int a = x-100;
solaris skrev:Laguna skrev:solaris skrev:nej jag antar att jag inte kan få 100 eftersom Math.random(); ger ett tal 0<=r<1 och eftersom det aldrig kan va 1 kan det antagligen inte bli 100 heller. men hur ska jag göra för att får 100 då`?
Ta lite mer än 200.
Då borde det här funka ..?
Postad: 1 timme sedan
double r = Math.random();
int x = (int)(201*r);
int a = x-100;
Det borde funka.
För att få bättre avrundning och fördelning skulle jag använda ursprungsansatsen (double x = 200*r - 100), men istället för att bara casta till en int så skulle jag addera 0,5 och sedan använda floor().
Yngve skrev:För att få bättre avrundning och fördelning skulle jag använda ursprungsansatsen (double x = 200*r - 100), men istället för att bara casta till en int så skulle jag addera 0,5 och sedan använda floor().
Då får jag det till att när r är i [0.9925, 0.9975[ så blir det 99, och i [0.9975, 1[ blir det 100, dvs 100 förekommer bara hälften så ofta som 99.
Edit: rättade skrivfel.
Laguna skrev:Yngve skrev:För att få bättre avrundning och fördelning skulle jag använda ursprungsansatsen (double x = 200*r - 100), men istället för att bara casta till en int så skulle jag addera 0,5 och sedan använda floor().
Då får jag det till att när r är i [0.9925, 0.9975[ så blir det 99, och i [0.9975, 1[ blir det 100, dvs 100 förekommer bara hälften så ofta som 99.
Edit: rättade skrivfel.
Ja det har du rätt i.
Då är det bätte att multiplicera med 201, skippa additionen men att ändå använda floor() för bättre fördelning, precis som både du och tomast80 föreslagit.