Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.11.2011, 19:21
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 1  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
Question Рандом выдает далеко не случайное число

Для программы необходимо число от 0 до 3. Сделал такого вида рандом -
Код AS3:
var t:uint = Math.floor(Math.random() * 4);
Сделал больше 20 проверок по 10 000 раз, абсолютно всегда ноль выпадает в несколько раз реже остального. Как уравновесить шансы?
__________________
Humanity.push(new Man());

Старый 06.11.2011, 19:27
Newred вне форума Посмотреть профиль Отправить личное сообщение для Newred Посетить домашнюю страницу Newred Найти все сообщения от Newred
  № 2  
Ответить с цитированием
Newred
 
Аватар для Newred

Регистрация: May 2010
Адрес: Киев, Украина
Сообщений: 140
Записей в блоге: 2
Код AS3:
var t:uint = Math.ceil(Math.random()*4) - 1 ;

Старый 06.11.2011, 19:33
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 3  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
тогда выходит -1. а мне от 0 до 3
__________________
Humanity.push(new Man());

Старый 06.11.2011, 19:36
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 4  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
Сообщение от Lyso Посмотреть сообщение
Для программы необходимо число от 0 до 3. Сделал такого вида рандом -
Код AS3:
var t:uint = Math.floor(Math.random() * 4);
Сделал больше 20 проверок по 10 000 раз, абсолютно всегда ноль выпадает в несколько раз реже остального. Как уравновесить шансы?
Странно, только что проверил:
Код AS3:
package  {
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class Randomizer extends Sprite {
 
		private var _zeros:		int = 0;
		private var _ones:		int = 0;
		private var _twos:		int = 0;
		private var _threes:	int = 0;
 
 
		public function Randomizer() {
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			for (var i:int = 0; i < 10000; i++) {
				var rand:int = int(Math.random() * 4);
				if (rand == 0) _zeros++;
				else if (rand == 1) _ones++;
				else if (rand == 2) _twos++;
				else if (rand == 3) _threes++;
			}
			trace("zeros: " + _zeros, "ones: " + _ones, "twos: " + _twos, "threes: " + _threes);
		}
	}
}
трейс выводит:
Цитата:
zeros: 2473 ones: 2503 twos: 2492 threes: 2532
zeros: 2520 ones: 2591 twos: 2433 threes: 2456
zeros: 2573 ones: 2475 twos: 2482 threes: 2470
...
Это можно назвать примерно равными результатами

Старый 06.11.2011, 19:39
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 5  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
действительно странно, у меня ни в какую не хочет хоть более менее часто выводить ноль. math.ceil вообще ноль возвращать мне не будет...
__________________
Humanity.push(new Man());

Старый 06.11.2011, 19:41
Newred вне форума Посмотреть профиль Отправить личное сообщение для Newred Посетить домашнюю страницу Newred Найти все сообщения от Newred
  № 6  
Ответить с цитированием
Newred
 
Аватар для Newred

Регистрация: May 2010
Адрес: Киев, Украина
Сообщений: 140
Записей в блоге: 2
Код AS3:
var t:uint = Math.ceil(Math.random()*4 - 1) ;

Старый 06.11.2011, 19:42
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 7  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Зачем тут вообще ceil?

Старый 06.11.2011, 19:49
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 8  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
воообще у меня вот такая функция, которая возвращает случайное число, кроме указанных в параметре. может в ней что-то не так...
Код AS3:
private function randExp(c:int = -1,c1:int = -1):int
		{
			var t:int = Math.floor(Math.random() * 4);
			trace(t);
			return (t == c || t == c1)?randExp(c, c1):t;
		}
__________________
Humanity.push(new Man());

Старый 06.11.2011, 19:56
Newred вне форума Посмотреть профиль Отправить личное сообщение для Newred Посетить домашнюю страницу Newred Найти все сообщения от Newred
  № 9  
Ответить с цитированием
Newred
 
Аватар для Newred

Регистрация: May 2010
Адрес: Киев, Украина
Сообщений: 140
Записей в блоге: 2
Цитата:
Зачем тут вообще ceil?
Первое что пришло в голову.

Вот классная и простая реализация
Код AS3:
var t:Number = beetwin( 0, 3 ) ; // от 0 до 3 
 
	private function beetwin(param0:int, param1:int):Number
	{
		var temp:Number = param0 + Math.floor(Math.random() * (param1 - param0)) ; 
		return temp;
	}

Старый 06.11.2011, 19:58
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 10  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
мне нужно еще с исключениями. ответ не должен быть равен с или c1.
__________________
Humanity.push(new Man());

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 10:47.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.