losowanie liczby z zakresu - blad

0

Mam tu gdzieś błąd lecz nie potrafię go znaleźć, może ktoś mi wyjaśni co źle robię?
Losowanie liczby z zakresu.

const double D = 2.99, G = 9.99;
double cena;
srand (time(0));
cena = D + rand( )%(D+1-G);
4

Problem z nazewnictwem zmiennych więc nie widzisz co czynisz.

srand(time(0)); // musi być tylko raz na początku main
const double MinPrice=2.99,MaxPrice=9.99;
double Price=MinPrice+rand()%(MaxPrice+1-MinPrice);
3
#include <iostream>
#include <ctime>
#include <random>
#include <iomanip>

using namespace std;

int main()
{
    constexpr int first=2, last=10;

    std::random_device rd;
    std::default_random_engine engine(rd());
    std::uniform_real_distribution<double> dist(first,last);

    for(int i=log10(0.1);++i<last;cout<<setprecision(3)<<dist(engine)<<"\n"){}

    return 0;
}
2

Jak według ciebie działa operator% dla liczb zmiennoprzecinkowych?
zresztą kompilator bardzo jasno mówi w czym problem: https://godbolt.org/z/nMo8GYEbK

1

@bifed85954:
Rozwiązanie podane przez @OfEl jest dobre, ale jeśli z jakiegoś powodu upierasz się przy pisaniu tego z użyciem rand() to zrób tak

  1. Zamień wynik działania funkcji rand() na liczbę zmiennoprzecinkową L z zakresu 0...1 (podpowiedź - rand() zwraca liczbę całkowitą z zakresu 0...RAND_MAX)
  2. Przeskaluj wynik z zakresu 0...1 do zakresu A...B

1 użytkowników online, w tym zalogowanych: 0, gości: 1