srand(time(NULL));
float f = rand()%10/10;
std::setprecision(2);
std::cout << f;
Проблема: откидывается остаток
Цель: нужен рандом от 0.0 до 0.9 с шагом 0.1 (для рандомизации цвета в Open GL)
Другие языки программирования и технологии
Как делить с остатком в C++
#include <iostream>
#include <random>
#include <vector>
#include <iomanip>
using namespace std;
double randomize(double beg, double end, int sign);
vector<double> create_collection(vector<double>::size_type quantity, double left, double rigth, int prec);
void print_collection(vector<double>& collection, streamsize width, streamsize prec);
int main() {
int prec = 1; // определяет количество знаков после точки
vector<double> collection = create_collection(24, 0, 0.9, prec);
print_collection(collection, 4, prec);
cin.get();
}
void print_collection(vector<double>& collection, streamsize width, streamsize prec) {
for (auto &element : collection) cout << setw(width) << fixed << setprecision(prec) << element << '\n';
}
vector<double> create_collection(vector<double>::size_type quantity, double left, double rigth, int prec) {
vector<double> collection;
for (vector<double>::size_type i = 0; i < quantity; ++i) collection.push_back(randomize(left, rigth, prec));
return collection;
}
double randomize(double beg, double end, int prec) {
uniform_real_distribution<double> rand(beg, end);
random_device rnd;
double num = rand(rnd);
double exponent = pow(10, prec);
int tmp = static_cast<int>(num * exponent);
return tmp / exponent;
}
#include <random>
#include <vector>
#include <iomanip>
using namespace std;
double randomize(double beg, double end, int sign);
vector<double> create_collection(vector<double>::size_type quantity, double left, double rigth, int prec);
void print_collection(vector<double>& collection, streamsize width, streamsize prec);
int main() {
int prec = 1; // определяет количество знаков после точки
vector<double> collection = create_collection(24, 0, 0.9, prec);
print_collection(collection, 4, prec);
cin.get();
}
void print_collection(vector<double>& collection, streamsize width, streamsize prec) {
for (auto &element : collection) cout << setw(width) << fixed << setprecision(prec) << element << '\n';
}
vector<double> create_collection(vector<double>::size_type quantity, double left, double rigth, int prec) {
vector<double> collection;
for (vector<double>::size_type i = 0; i < quantity; ++i) collection.push_back(randomize(left, rigth, prec));
return collection;
}
double randomize(double beg, double end, int prec) {
uniform_real_distribution<double> rand(beg, end);
random_device rnd;
double num = rand(rnd);
double exponent = pow(10, prec);
int tmp = static_cast<int>(num * exponent);
return tmp / exponent;
}
/ означает целочисленное деление, если оба операнда int. Ниже правильные варианты:
Самая простая запись:
float f = rand()%10/10.0;//последний операнд - double, поэтому деление будет не целочисленным
Самая короткая запись:
float f = rand()%10/10.; //C++ понимает такую форму записи, но для нас она непривычная
Самая правильная (IMHO) запись
float f = float( rand() % 10 ) / 10.0f; //прямо указываем преобразование
Самая строгая запись:
float f = static_cast( rand() % 10 ) / 10.0f;
Ну а еще можно объявить свою функцию вроде float random( float min, float max, float step) и вызывать ее...
Самая простая запись:
float f = rand()%10/10.0;//последний операнд - double, поэтому деление будет не целочисленным
Самая короткая запись:
float f = rand()%10/10.; //C++ понимает такую форму записи, но для нас она непривычная
Самая правильная (IMHO) запись
float f = float( rand() % 10 ) / 10.0f; //прямо указываем преобразование
Самая строгая запись:
float f = static_cast( rand() % 10 ) / 10.0f;
Ну а еще можно объявить свою функцию вроде float random( float min, float max, float step) и вызывать ее...
Евгений Пономарев
Большое спасибо. Очень понятно обяснил)
Похожие вопросы
- Учусь програмировать на C++ по книге "C++ для чайников".Проблема.
- Помогите срочно C#
- Помогите исправить ошибку в программе (c++).
- Зачем нужен C++, если есть C?
- Ещё тупой вопрос по C++ :)
- Почему многие отдают предпочтение C++ а не C# ?
- Учу C++! Уже знаю: типы данных, циклы. условия, привидения и т. д учу 5дней. вот программа! Как норм за 5 дней?
- Как в C++ приравнять переменную и текст? А то такую запись нельзя. А без этого задачу не решить
- Язык программирования C.
- Делаю нейронную сеть на C++. Как в C++ работать с микрофоном?