• 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>.

VPS Starter Arubacloud
0 głosów
10,545 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,731 wizyt
pytanie zadane 16 lutego 2016 w C i C++ przez Bobek Nowicjusz (150 p.)
0 głosów
1 odpowiedź 2,512 wizyt
0 głosów
2 odpowiedzi 5,813 wizyt
pytanie zadane 22 kwietnia 2016 w C i C++ przez TheFeniks Gaduła (4,690 p.)

93,014 zapytań

141,977 odpowiedzi

321,267 komentarzy

62,355 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...