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

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

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

Регистрация: Jan 2012
Сообщений: 835
По умолчанию Расчет вероятности

Всем привет. Задался таким вопросом. Есть к примеру игровой предмет, вероятность его выпадения равна 3.85% из 100%. Подскажите метод реализации? Через Math.random получается только с целыми числами и то, выпадение от 1-4(если к примеру шанс выпадения равен 4%) это достаточно большой шанс мне кажется, а собственно нужно использовать наверно другой метод и с учетом сотых, а то и тысячных долей

Старый 12.03.2017, 03:28
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 2  
Ответить с цитированием
faraday
 
Аватар для faraday

Регистрация: Apr 2009
Сообщений: 409
почему random получается только с целыми чмслами?
Код AS3:
droped=(Math.random()<0.0385)

Старый 12.03.2017, 03:58
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 3  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 835
Ммм, что-то не пойму, это скобки дают результат возврата boolen-а, обычно просто Math.random без скобок возвращает число? И еще такой вопрос, 0.0385 это 3.85%? А если установить 0.55385, это какая вероятность? 55.385%?

Старый 12.03.2017, 09:29
callme вне форума Посмотреть профиль Отправить личное сообщение для callme Найти все сообщения от callme
  № 4  
Ответить с цитированием
callme
 
Аватар для callme

Регистрация: Dec 2014
Сообщений: 312
Math.random() возвращает псевдослучайное число n, где 0 <= n < 1.

Причем n — число вещественное, а не целое (Number а не int). То есть функция может вернуть не только 0 или 1, но и числа между ними.

Можно так написать

Код AS3:
var r:Number = Math.random() * 100;
 
if (r < 3.85) {
    // предмет выпал;
}
else {
    // предмет не выпал;
}
Или так

Код AS3:
droped = Math.random() * 100 < 3.85;
Операция "<" возращает булеановское значение.
http://help.adobe.com/ru_RU/FlashPla...html#less_than

Извините если по-капитански написал ))

Старый 12.03.2017, 12:27
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,642
Записей в блоге: 4
Цитата:
возращает булеановское значение.
булево
__________________
Ко мне можно и нужно обращаться на ты)

Старый 12.03.2017, 14:27
callme вне форума Посмотреть профиль Отправить личное сообщение для callme Найти все сообщения от callme
  № 6  
Ответить с цитированием
callme
 
Аватар для callme

Регистрация: Dec 2014
Сообщений: 312
caseyryan, спасибки, буду знать

Старый 12.03.2017, 15:10
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 7  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
И еще такой вопрос, 0.0385 это 3.85%? А если установить 0.55385, это какая вероятность? 55.385%?
Если бы вы не прогуливали уроки Теории вероятности, то знали бы, что вероятность может пребывать не только в процентной форме, но и в форме дроби. с:

Godwarlock, перед тем как задать вопрос "что возвращает Math.random()", попробуйте обратиться к документации от Adobe, где чётко и ясно на русском языке написано, что он возвращает.
http://help.adobe.com/ru_RU/FlashPla....html#random()

Вообще, Math.random без скобок возвращает функцию.
Код AS3:
var f:Function = Math.random;
trace(f()); // какое-то случайное значение

Цитата:
Через Math.random получается только с целыми числами и то, выпадение от 1-4(если к примеру шанс выпадения равен 4%) это достаточно большой шанс мне кажется
Довольно забавно, но в этом случае
Код AS3:
trace( int ( 1 + Math.random()*4));
шанс выпадения 1 из 4, 2 из 4, 3 из 4 и 4 из 4 одинаков, так как Math.random() возвращает псевдослучайное число от 0 до 1 без уклона в какую-либо сторону(равномерно).
Проверить это можно так:

Код AS3:
package com.zackmercury.test
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	/**
	 * ...
	 * @author ZackMercury
	 */
	public class Main extends Sprite 
	{
 
		public function Main() 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			var numsDrops:Vector.<uint> = new <uint>[0, 0, 0, 0];
			var length:int = numsDrops.length;
 
			for (var i:int = 0; i < 10000; i ++)
			{
				numsDrops[int(Math.random() * length)] ++;
			}
 
			trace(numsDrops.toString());
		}
	}
 
}
->
Код:
2521,2520,2514,2445
Больше оборотов
Код AS3:
for (var i:int = 0; i < 10000000; i ++)
Код:
2500448,2498833,2499876,2500843
Что означает, что шанс выпадения 1 из 4 при использовании Math.random() является 1/4, тоесть, 0.25(что не равно 4%(0.04))

Цитата:
это скобки дают результат возврата boolen-а
Скобки не могут ничего возвращать, они просто определяют порядок действий над операндами.
А вот логические операторы( > < == <= >= === <== >== != ! ) возвращают булевые значения, это же основы.
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 12.03.2017 в 16:07.
Старый 12.03.2017, 16:31
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 8  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 835
Да с логическими операторами фейланул, просто не сразу втыкнул xD
Спасибо всем за разъяснение))

Старый 28.03.2017, 23:22
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 9  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 835
Код AS3:
public static function getPercent(percent:Number):Boolean
		{
			percent = percent / 100;
			var percent_result:Boolean = (Math.random() < percent)
			return percent_result;
		}
Не пойму. Даже когда percent выставлена в 5%(0.05), на 5-10 раз выпадает true, это просто нереально часто. Через for, вроде бы нормально генерирует, то есть на 20 раз, у меня 4 раза вернуло true, но когда функция вызывается в тот момент, когда это нужно, то чаще всего при низком проценте, возвращает true. Такое чувство, что эти 5% каким то образом превращаются в 25%. Хоть уменьшай всё до 1% и ниже


Последний раз редактировалось Godwarlock; 28.03.2017 в 23:59.
Старый 29.03.2017, 00:20
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 10  
Ответить с цитированием
faraday
 
Аватар для faraday

Регистрация: Apr 2009
Сообщений: 409
рандом есть рандом. можешь попробовать другой

Код AS3:
private var seed:Number=new Date().getTime();
public function get nextRand():Number{
			seed = (seed * 214013 + 2531011) % 0x7fffffff;
			return seed/ 0x7fffffff;
		}

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

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

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


 


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


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