Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.98/40: Рейтинг темы: голосов - 40, средняя оценка - 4.98
Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1

Random for double:(

10.09.2013, 23:27. Показов 7951. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание: Создать функцию random(a, b), которая возвращает случайное вещественное число от вещественного числа a включительно до вещественного числа b не включительно.

И что такое static_cast<double>?

Похожие задания:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <cstdlib> // для использования генератора случайных чисел
#include <ctime>   // функции времени для инициализации генератора с. ч.
 
using namespace std;
 
int main() {
  srand(unsigned(time(0))); // инициализации генератора с. ч.
 
  // rand() генерирует псевдослучайное целое число от 0 до 
  // константы RAND_MAX, значение которой не меньше, чем 32767
 
  // Случайное целое от 0 до 99
  int n1 = rand() % 100;
  cout << n1 << endl;
 
  // Случайное целое от a=10 до b=99
  const int a = 10;
  const int b = 100;
  int n2 = rand() % (b - a) + a;
  cout << n2 << endl;
 
  // Случайное вещественное от 0 до 1
  double d = static_cast<double>(rand()) / RAND_MAX;
  cout << d << endl;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.09.2013, 23:27
Ответы с готовыми решениями:

Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double
Думаю из-за polp #include&lt;iostream&gt; #include&lt;cmath&gt; #include&lt;cstdlib&gt; using namespace std; double polp(double af,double...

Ошибка: error LNK2001: unresolved external symbol "double __cdecl Akk(double,double,double)"
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; double Akk(double x, double y, double z); int main() { int a, b, c; ...

Как получить random из Double по всему диапазону Double? Неужели поразрядно?
У меня задача работать с числами порядка E-25, нужно генерировать случайное, как поступить? может быть есть библиотеки?

21
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
10.09.2013, 23:28
Цитата Сообщение от DmitryM5 Посмотреть сообщение
И что такое static_cast<double>?
http://www.rsdn.ru/article/cpp/static_cast.xml
1
Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1
10.09.2013, 23:30  [ТС]
Была такая идея,но ...
double random(double a,double b) {
return static_cast<double>((rand() % (b - a) + a))/RAND_MAX;
}
Миниатюры
Random for double:(  
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
10.09.2013, 23:34
Применяете остаток от деления к вещественным числам
0
Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1
10.09.2013, 23:46  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Применяете остаток от деления к вещественным числам
не понял(

Добавлено через 9 минут
Все время левую границу выдает
C++
1
2
3
double random(double a,double b) {
return static_cast<double>(rand()/RAND_MAX*(b-a)+a);
}
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
11.09.2013, 01:17
Цитата Сообщение от DmitryM5 Посмотреть сообщение
не понял(

Добавлено через 9 минут
Все время левую границу выдает
double random(double a,double b) {
return static_cast<double>(rand()/RAND_MAX*(b-a)+a);
}
Кастить надо перед делением целого числа на целое.
0
Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1
11.09.2013, 08:58  [ТС]
Цитата Сообщение от Nekto Посмотреть сообщение
Кастить надо перед делением целого числа на целое.
C++
1
2
3
double random(double a,double b) {
return (static_cast<double>(rand()/RAND_MAX))*(b-a)+a;
}
Тоже самое...
0
11.09.2013, 09:15
 Комментарий модератора 
DmitryM5, выделяйте пожалуйста код соответствующими тегами.
0
Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1
11.09.2013, 09:19  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
DmitryM5, выделяйте пожалуйста код соответствующими тегами.
А как это делать?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
11.09.2013, 09:35
DmitryM5, выделяете ваш код и нажимаете на кнопку с соответствующим тегом на панели над окном ввода сообщения.
К примеру, для тега C++:
1
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
11.09.2013, 10:02
C++
1
2
3
double DRand( double a, double b ) {
   return a + std::fmod( static_cast< double >( std::rand()), b - a );
}
0
Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1
11.09.2013, 10:40  [ТС]
Цитата Сообщение от Toshkarik Посмотреть сообщение
C++
1
2
3
double DRand( double a, double b ) {
   return a + std::fmod( static_cast< double >( std::rand()), b - a );
}
Спасибо,поясни что такое fmod и куда пропал randmax?
И почему мой кол не работал,вроде правилен.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
11.09.2013, 10:45
Операция % - это взятие остатка от деления для целых чисел. Для чисел с плавающей точкой для этого есть специальная функция fmod, которая принимает в качестве параметров делимое и делитель, и возвращает остаток от деления. Собственно а зачем здесь RAND_MAX?
1
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
11.09.2013, 10:51
Оно?
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
11.09.2013, 12:27
Цитата Сообщение от Toshkarik Посмотреть сообщение
Операция % - это взятие остатка от деления для целых чисел. Для чисел с плавающей точкой для этого есть специальная функция fmod, которая принимает в качестве параметров делимое и делитель, и возвращает остаток от деления. Собственно а зачем здесь RAND_MAX?
Если b-a имеет только целую часть, то по твоей формуле по идее окончательный ответ тоже будет иметь только целую часть+дробную от а.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// drand.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <cstdlib>
#include <cmath>
#include <iostream>
 
double DRand2 (double a, double b) {
  return a+static_cast<double>(std::rand())/RAND_MAX*(b-a);
  }
 
double DRand( double a, double b ) {
   return a + std::fmod( static_cast< double >( std::rand()), b - a );
}
 
int _tmain(int argc, _TCHAR* argv[])
{
  for (double a=0, b=1;a<20;++a,b+=2)
    std::cout<<a<<" "<<b<<" Rand: "<<DRand(a,b)<<" Rand2: "<<DRand2(a,b)<<std::endl;
    return 0;
}
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
0 1 Rand: 0 Rand2: 0.00125126
1 3 Rand: 1 Rand2: 1.38661
2 5 Rand: 3 Rand2: 3.75503
3 7 Rand: 5 Rand2: 4.40117
4 9 Rand: 8 Rand2: 8.1142
5 11 Rand: 10 Rand2: 6.04465
6 13 Rand: 12 Rand2: 10.9735
7 15 Rand: 10 Rand2: 9.43196
8 17 Rand: 16 Rand2: 8.82263
9 19 Rand: 15 Rand2: 10.4731
10 21 Rand: 17 Rand2: 20.8738
11 23 Rand: 20 Rand2: 12.429
12 25 Rand: 18 Rand2: 12.1158
13 27 Rand: 25 Rand2: 20.4433
14 29 Rand: 19 Rand2: 23.0265
15 31 Rand: 29 Rand2: 17.6597
16 33 Rand: 28 Rand2: 23.6634
17 35 Rand: 21 Rand2: 18.0267
18 37 Rand: 21 Rand2: 32.8831
19 39 Rand: 33 Rand2: 29.3977
Press any key to continue . . .
0
Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1
11.09.2013, 17:32  [ТС]
Цитата Сообщение от Nekto Посмотреть сообщение
Если b-a имеет только целую часть, то по твоей формуле по идее окончательный ответ тоже будет иметь только целую часть+дробную от а.
Не работает ни Toshkarik'a программа,не твоя Nekto...
Она выводит либо одно и то же число,либо с небольшим различием ,допустим 6.00125,6.00130 и так по несколько раз.....

Добавлено через 4 минуты
Цитата Сообщение от Nekto Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// drand.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <cstdlib>
#include <cmath>
#include <iostream>
 
double DRand2 (double a, double b) {
  return a+static_cast<double>(std::rand())/RAND_MAX*(b-a);
  }
 
double DRand( double a, double b ) {
   return a + std::fmod( static_cast< double >( std::rand()), b - a );
}
 
int _tmain(int argc, _TCHAR* argv[])
{
  for (double a=0, b=1;a<20;++a,b+=2)
    std::cout<<a<<" "<<b<<" Rand: "<<DRand(a,b)<<" Rand2: "<<DRand2(a,b)<<std::endl;
    return 0;
}
Что вообще вот это такое??
C++
1
2
3
4
// drand.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
0
Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1
11.09.2013, 17:36  [ТС]
Так всегда выводит одно и тоже..
Миниатюры
Random for double:(  
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
11.09.2013, 23:51
Цитата Сообщение от DmitryM5 Посмотреть сообщение
Так всегда выводит одно и тоже..
srand(time(0)); в начале программы Т_Т http://en.cppreference.com/w/c... ndom/srand
1
Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1
12.09.2013, 22:12  [ТС]
Цитата Сообщение от Nekto Посмотреть сообщение
srand(time(0)); в начале программы Т_Т http://en.cppreference.com/w/c... ndom/srand
Спасибо,но все же...
Когда я запускаю в цикле for от 1 до 100,все нормально выводит разные числа.
Как убираю for и запускаю по несколько раз,то вывод возвращает только меняя сотые и тысячные....
Т.е. 75.165
75.175
...
75.250
....
и тому подобное...
Вопрос почему так??????????????????????
Миниатюры
Random for double:(   Random for double:(  
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
12.09.2013, 23:38
Цитата Сообщение от DmitryM5 Посмотреть сообщение
Спасибо,но все же...
Когда я запускаю в цикле for от 1 до 100,все нормально выводит разные числа.
Как убираю for и запускаю по несколько раз,то вывод возвращает только меняя сотые и тысячные....
Т.е. 75.165
75.175
...
75.250
....
и тому подобное...
Вопрос почему так??????????????????????
Потому что псевдогенератор.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.09.2013, 23:38
Помогаю со студенческими работами здесь

Double Random в диапазоне
Подскажите, пожалуйста, как можно сделать рандом чисел, например, в диапазоне от 20.6 до 50.7?

Ругается на строчку double[] wArray = new double[n];, double[] w = new double[n];
Ругается на строчку double wArray = new double;, double w = new double; Не удаётся преобразовать тип double в int ((( using...

Почему мы пишем double x (double y)? а не через запятую double x,y
почему мы пишем double x (double y)? а не через запятую double x,y

Что не так с 'Random' или There is no overloaded version of 'Random' that can be called with these arguments
Доброго времени суток! Я с программированием на &quot;Вы&quot;, поэтому очень прошу доходчиво объяснить, что не так с этой строчкой? Выводит ошибку:...

Написать функцию int Search ( double A[], int n , double x), которая находит в массиве double A[n] элемент, значение которого равно x
Написать функцию int Search ( double A, int n , double x), которая находит в массиве double A элемент, значение которого равно x. Функция...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru