Форум программистов, компьютерный форум CyberForum.ru

Random for double:( - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 740
Записей в блоге: 1
10.09.2013, 23:27     Random for double:( #1
Задание: Создать функцию 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,832
Записей в блоге: 2
Завершенные тесты: 1
10.09.2013, 23:28     Random for double:( #2
Цитата Сообщение от DmitryM5 Посмотреть сообщение
И что такое static_cast<double>?
http://www.rsdn.ru/article/cpp/static_cast.xml
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 740
Записей в блоге: 1
10.09.2013, 23:30  [ТС]     Random for double:( #3
Была такая идея,но ...
double random(double a,double b) {
return static_cast<double>((rand() % (b - a) + a))/RAND_MAX;
}
Миниатюры
Random for double:(  
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,832
Записей в блоге: 2
Завершенные тесты: 1
10.09.2013, 23:34     Random for double:( #4
Применяете остаток от деления к вещественным числам
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 740
Записей в блоге: 1
10.09.2013, 23:46  [ТС]     Random for double:( #5
Цитата Сообщение от Croessmah Посмотреть сообщение
Применяете остаток от деления к вещественным числам
не понял(

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

Добавлено через 9 минут
Все время левую границу выдает
double random(double a,double b) {
return static_cast<double>(rand()/RAND_MAX*(b-a)+a);
}
Кастить надо перед делением целого числа на целое.
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 740
Записей в блоге: 1
11.09.2013, 08:58  [ТС]     Random for double:( #7
Цитата Сообщение от Nekto Посмотреть сообщение
Кастить надо перед делением целого числа на целое.
C++
1
2
3
double random(double a,double b) {
return (static_cast<double>(rand()/RAND_MAX))*(b-a)+a;
}
Тоже самое...
SatanaXIII
11.09.2013, 09:15
  #8
 Комментарий модератора 
DmitryM5, выделяйте пожалуйста код соответствующими тегами.
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 740
Записей в блоге: 1
11.09.2013, 09:19  [ТС]     Random for double:( #9
Цитата Сообщение от SatanaXIII Посмотреть сообщение
DmitryM5, выделяйте пожалуйста код соответствующими тегами.
А как это делать?
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5437 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
11.09.2013, 09:35     Random for double:( #10
DmitryM5, выделяете ваш код и нажимаете на кнопку с соответствующим тегом на панели над окном ввода сообщения.
К примеру, для тега C++:
Random for double:(
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
11.09.2013, 10:02     Random for double:( #11
C++
1
2
3
double DRand( double a, double b ) {
   return a + std::fmod( static_cast< double >( std::rand()), b - a );
}
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 740
Записей в блоге: 1
11.09.2013, 10:40  [ТС]     Random for double:( #12
Цитата Сообщение от Toshkarik Посмотреть сообщение
C++
1
2
3
double DRand( double a, double b ) {
   return a + std::fmod( static_cast< double >( std::rand()), b - a );
}
Спасибо,поясни что такое fmod и куда пропал randmax?
И почему мой кол не работал,вроде правилен.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
11.09.2013, 10:45     Random for double:( #13
Операция % - это взятие остатка от деления для целых чисел. Для чисел с плавающей точкой для этого есть специальная функция fmod, которая принимает в качестве параметров делимое и делитель, и возвращает остаток от деления. Собственно а зачем здесь RAND_MAX?
Петррр
 Аватар для Петррр
5914 / 3351 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
11.09.2013, 10:51     Random for double:( #14
Оно?
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
11.09.2013, 12:27     Random for double:( #15
Цитата Сообщение от 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;
}
Код
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 . . .
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 740
Записей в блоге: 1
11.09.2013, 17:32  [ТС]     Random for double:( #16
Цитата Сообщение от 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[])
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 740
Записей в блоге: 1
11.09.2013, 17:36  [ТС]     Random for double:( #17
Так всегда выводит одно и тоже..
Миниатюры
Random for double:(  
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
11.09.2013, 23:51     Random for double:( #18
Цитата Сообщение от DmitryM5 Посмотреть сообщение
Так всегда выводит одно и тоже..
srand(time(0)); в начале программы Т_Т http://en.cppreference.com/w/cpp/numeric/random/srand
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 740
Записей в блоге: 1
12.09.2013, 22:12  [ТС]     Random for double:( #19
Цитата Сообщение от Nekto Посмотреть сообщение
srand(time(0)); в начале программы Т_Т http://en.cppreference.com/w/cpp/numeric/random/srand
Спасибо,но все же...
Когда я запускаю в цикле for от 1 до 100,все нормально выводит разные числа.
Как убираю for и запускаю по несколько раз,то вывод возвращает только меняя сотые и тысячные....
Т.е. 75.165
75.175
...
75.250
....
и тому подобное...
Вопрос почему так??????????????????????
Миниатюры
Random for double:(   Random for double:(  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2013, 23:38     Random for double:(
Еще ссылки по теме:

Домашнее задание ошибки double circle_area(double R) C++
C++ Вывести long double число без перевода в double
C++ Random и объекты класса (pseudo random)

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

Или воспользуйтесь поиском по форуму:
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
12.09.2013, 23:38     Random for double:( #20
Цитата Сообщение от DmitryM5 Посмотреть сообщение
Спасибо,но все же...
Когда я запускаю в цикле for от 1 до 100,все нормально выводит разные числа.
Как убираю for и запускаю по несколько раз,то вывод возвращает только меняя сотые и тысячные....
Т.е. 75.165
75.175
...
75.250
....
и тому подобное...
Вопрос почему так??????????????????????
Потому что псевдогенератор.
Yandex
Объявления
12.09.2013, 23:38     Random for double:(
Ответ Создать тему
Опции темы

Текущее время: 11:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru