• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ losowanie liczb z przedziału <-1;1>.

Object Storage Arubacloud
0 głosów
10,411 wizyt
pytanie zadane 8 listopada 2015 w C i C++ przez Kestrel Początkujący (300 p.)
Witajcie!

Potrzebuję kodu, który wylosuje mi liczby od różne liczby od -1 do 1 żeby wypełnic nimi potem tablice (z tym sobie radzę). Wiem, ze było duzo pytań o  losowanie, ale nie znalazłem żadnego pytania o przedział tego typu. Prosze o pomoc.

4 odpowiedzi

+2 głosów
odpowiedź 8 listopada 2015 przez hit02 Nałogowiec (33,970 p.)
wybrane 8 listopada 2015 przez Kestrel
 
Najlepsza

Czy chodzi o coś takiego?

double number = (((double)rand() / RAND_MAX) * 2) - 1;
komentarz 8 listopada 2015 przez Kestrel Początkujący (300 p.)
Tak jest!!!

Dzięki wielkie. Mógłbym spytać jak do tego doszedłeś ? Bo to nie wygląda jak sposób z poradnika.
komentarz 8 listopada 2015 przez hit02 Nałogowiec (33,970 p.)

Po pierwsze, trzeba uzyskać liczbę losową z zakresu <0, 1>, czyli mamy podręcznikowy kodzik:

(double)rand() / RAND_MAX;

Następnie rozszeżyć zakres do <0, 2>, czyli kod w tej chwili wygląda tak:

((double)rand() / RAND_MAX) * 2;

Dzięki temu przedział ma już odpowiednią rozpiętość, ale trzeba go jeszcze przesunąć, więc odejmujemy 1 i uzyskujemy coś takiego:

(((double)rand() / RAND_MAX) * 2) - 1;

smiley

komentarz 8 listopada 2015 przez Kestrel Początkujący (300 p.)
Ok, dzięki wielkie, w końcu załapałem.
+2 głosów
odpowiedź 8 listopada 2015 przez Patrycjerz Mędrzec (192,320 p.)
Ale jakie liczby? Całkowite, czy wszystkie wymierne?
komentarz 8 listopada 2015 przez Kestrel Początkujący (300 p.)
Wszystkie wymierne.
komentarz 8 listopada 2015 przez Patrycjerz Mędrzec (192,320 p.)

Niestety funkcja rand zwraca jedynie liczby całkowite, ale można temu zaradzić. Stwórz sobie przedział, ale pomnożony o jakąś liczbę, np. o 100, czyli <-100; 100>. Później, gdy wylosujesz liczbę z tego przedziału, to podziel wynik przez ten mnożnik, czyli np. przy wylosowaniu 74 będziesz miał 0.74. Pamiętaj, aby przy dzieleniu użyć zmiennej float i zapisu z f, czyli np.:

float zmienna = 74.0f / 100.0f;

 

0 głosów
odpowiedź 8 listopada 2015 przez Michał628496 Pasjonat (17,340 p.)
Wylosuj liczbę a potem wylosuj drugą liczbę która będzie równa 0 lub 1 i jeśli jest 0 to pierwsza liczba jest ujemna a jak 1 to dodatnia
komentarz 8 listopada 2015 przez Kestrel Początkujący (300 p.)
To raczej nie zadziała. Potrzebne mi liczby typu 0,96 ; -0,18 ; 0,36 itp.
komentarz 8 listopada 2015 przez Michał628496 Pasjonat (17,340 p.)
To pierwszą liczbę wylosujesz np od 0 do 1000 i podzielisz przez 1000 to będziesz miał liczbę między 0 a 1, zależy ile miejsc po przecinku chcesz mieć
0 głosów
odpowiedź 8 listopada 2015 przez Rogargol Pasjonat (16,600 p.)
Szczerze mowiac nie wiem... Na szybko przyszlo mi do glowy, ze mozesz losowac liczy z przedzialu np 0-2000, a pozniej podzielic przez 1000 i odjac 1000. Jesli chcesz wiecej miejsc po przecinku to moze to byc np 2000000. To takie rozwiazanie na szybko ktore mi przychodzi do glowy, ale moze sa lepsze funkcje w tym celu.

Podobne pytania

0 głosów
4 odpowiedzi 2,545 wizyt
pytanie zadane 16 lutego 2016 w C i C++ przez Bobek Nowicjusz (150 p.)
0 głosów
1 odpowiedź 2,293 wizyt
0 głosów
2 odpowiedzi 5,524 wizyt
pytanie zadane 22 kwietnia 2016 w C i C++ przez TheFeniks Gaduła (4,690 p.)

92,566 zapytań

141,420 odpowiedzi

319,614 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...