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

Generowanie liczb zmiennoprzecinkowych z przedziału <-x;x> C++

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
3,326 wizyt
pytanie zadane 20 września 2017 w C i C++ przez Kyatt Początkujący (400 p.)

Witam.

Mam mały problem z wymienionym w temacie zadaniem. Wiem jak sprawić by liczby generowały się w określonym przedziale dla liczb dodatnich natomiast mam problem z przedziałem od -x do x. x oczywiście oznacza liczbę zmiennoprzecinkową, którą użytkownik wprowadza do programu.

przechowalnia = static_cast <float> ((rand()) / (static_cast <float> (RAND_MAX/(2*x)) - x));

Nie mam pomysłu co z tym dalej zrobić.

1 odpowiedź

+1 głos
odpowiedź 20 września 2017 przez criss Mędrzec (172,590 p.)
 
Najlepsza

Najlepiej zrobisz jeśli zostawisz rand-a i zajrzysz do biblioteki <random>.  

Przykład:

std::mt19937 gen{std::time(0)};
std::uniform_int_distribution<int>{-x, x}(gen);

Jeśli druga linia wygląda dla ciebie nieco dziwnie, to masz tam utworzenie obiektu (między nawiasami klamrowymi jest lista argumentów dla konstruktora) i od razu zawołanie z niego operatora ().

edit: uh, nie zauważyłem, że chodziło ci o liczby zmiennoprzecinkowe. Anyway - łatwo to zmienisz zamieniając na std::uniform_real_distribution.

komentarz 20 września 2017 przez Kyatt Początkujący (400 p.)
Dzięki wielkie, zdecydowanie prościej i skutecznie ;)
komentarz 20 września 2017 przez criss Mędrzec (172,590 p.)
Dopisałem edit jako, że chodziło ci o liczby zmiennoprzecinkowe. Dałem ci przykład dla liczb całkowitych :P
komentarz 20 września 2017 przez criss Mędrzec (172,590 p.)
I jeszcze jedno: najlepiej jakbyś generator (tutaj mt19937) tworzył raz, a obiekt dystrybucji możesz tak jak tutaj tworzyć "w locie" przy każdym losowaniu.
komentarz 20 września 2017 przez Kyatt Początkujący (400 p.)
Zamianę "int" na "real" odkryłem gdy pisałem kod i tak jak sugerujesz, generator utworzony tylko raz.

Podobne pytania

0 głosów
4 odpowiedzi 2,888 wizyt
pytanie zadane 16 lutego 2016 w C i C++ przez Bobek Nowicjusz (150 p.)
0 głosów
1 odpowiedź 2,552 wizyt
+2 głosów
2 odpowiedzi 182 wizyt

93,176 zapytań

142,185 odpowiedzi

321,979 komentarzy

62,506 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1401p. - dia-Chann
  2. 1380p. - Łukasz Piwowar
  3. 1372p. - CC PL
  4. 1370p. - Łukasz Eckert
  5. 1351p. - Tomasz Bielak
  6. 1328p. - Michal Drewniak
  7. 1312p. - Łukasz Siedlecki
  8. 1302p. - rucin93
  9. 1273p. - Adrian Wieprzkowicz
  10. 1232p. - Mikbac
  11. 1181p. - rafalszastok
  12. 1169p. - Grzegorz Aleksander Klementowski
  13. 1155p. - Piotr Aleksandrowicz
  14. 1149p. - Michał Telesz
  15. 1127p. - Mariusz Fornal
Szczegóły i pełne wyniki

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 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...