Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   random. Разница между AS и С. (http://www.flasher.ru/forum/showthread.php?t=80282)

Alex T 25.05.2006 14:51

random. Разница между AS и С.
 
Вопрос такой в чем разница randoma в AS от randoma в С? и почему?

где random более случайнее?
в AS - на выходе 8 байт, а С - 4 байта, да?

всем заранее спасибо...

Nirth 25.05.2006 15:22

разве в C всего один тип рандома?

Alex T 25.05.2006 16:35

Nirth:
в С не силен, а какие типы ты имеешь ввиду?
я имел ввиду функцию random библиотеки stdio.h...

Nirth 25.05.2006 16:37

я С вообще не знаю, но в Java есть не один рандом.
в флэше есть один правильный Math.random(); и один кривоватый - random();

Therion 25.05.2006 16:59

а чем отличается Math.random() от простого random()?

RandomUser 25.05.2006 16:59

А чем они еще отличаються кроме того что один правильный и медленный, а другой кривоватый и шустрый?
Цитата:

Сообщение от Alex T
Вопрос такой в чем разница randoma в AS от randoma в С? и почему?

И какая разница чем они отличаються?
Просто в С получается случайное число типа int(4 байта) от 0 до 4294836225, а в АС это дробное число от 0 до 1.
Вроде ничего не напутал...

Alex T 25.05.2006 17:07

заказчик просит использовать С-ный random, я хочу попробовать уговорить его использовать random во flashe, но мне нужны нормальные доводы, и еще мне из полученного числа надо извлечь 3 числа по 7 бит (первые 21 бит), т.е. для C, у которого точно на выходе 32 бита, это точно получится, а для flasha я не знаю сколько бит (64?)...

Nirth 25.05.2006 17:22

насколько я знаю флэшовый Number это double

RandomUser 25.05.2006 17:34

Может так пойдет?
Код:

rnd=Math.round(Math.random()*4294967295);
num1=rnd&127;
rnd>>=7;
num2=rnd&127;
rnd>>=7;
num3=rnd&127;

4294967295 - максимум 4-байтового числа.
Впрочем для этого случая можно юзать и 2097151. (111111111111111111111b - 21bit)

Скрипун 26.05.2006 00:13

Во флэша проще функция распределения... привязаная к времени (системном). Достаточно большое количество комбинаций до повторения...но все же не достаточное. Вообщето я знаю многих которые пишут свои myRandom() ф-иии, т.к. уж очень часто наблюдаются сбои в стандартной...

Скрипун 26.05.2006 00:20

Код:

///////////////////////////////////////////////
/////////////////Skripun to Russian flasher////////////////////
///////////25-05-06////////22-20/////////
///////////////////////////////////////////////
// Модули
// Ввод-Вывод
#include <iostream.h>
#include <stdio.h>
// RAND & SRAND
#include <stdlib.h>
//  TIME
#include <time.h>
int main(void)
{
// Начнём...
 cout << "--------------------------------" << "\n";
// Размер массива
 const unsigned int sz=10;
// время выдержки.Чем больше сам массив тем больше должно быть для более эффективного
// разброса.Можно поставить на sz.Или тоже через рандом, но не меньше чем число элементов массива!
 int looptime=100;
// unsigned int looptime=sz;
// Преинициализация массива
// Так
// int mas[]={0,1,2,3,4,5,6,7,8,9};
// Или так
 int mas[sz];for (int i=0;i<sz;i++) mas[i]=i;
 
 
// Для замены мест
 int r1,r2;
// Новая стартовая точка для Rand !
 srand((unsigned)time(NULL));
 
 for ( i=0;i<looptime;i++)
 {
 // Находим, какие элементы меняем местами
  do
  {
  r1=rand()%10;
  r2=rand()%10;}
  while (r1==r2) ;
 // Выводим по приколу меняемые элементы (паранойя)
  cout << "mas[" << r1 << "]=" << mas[r1] ;
  cout << "  mas[" << r2 << "]=" << mas[r2] ;
 // Меняем местами (не C-прогеру будет сложно понять)
 // Операция модуль 2 (Bitwise-exclusive-OR assignment)
 // РАБОТАЕТ ТОЛЬКО С ЦЕЛОЧИСЛЕННЫМИ ТИПАМИ!!!!!!!!!!!!!
  mas[r1]^= mas[r2]^=mas[r1]^=mas[r2];
 // Альтернативная замена - ВЕЗДЕ РАБОТАЕТ!!!!!!!!!!!!!!
 /*
  mas[r1]=mas[r1]+mas[r2];
  mas[r2]=mas[r1]-mas[r2];
  mas[r1]=mas[r1]-mas[r2];
 */
 // Результат замены (ещё паранойя)
  cout << " changed on  mas[" << r1 << "]=" << mas[r1] ;
  cout << "  mas[" << r2 << "]=" << mas[r2] << "\n";
 };
// Выводим и радуемся жизни
 for (i=0;i<sz;i++)
 {
  cout << mas[i] << "\n";
 };
// Это ради крутости - 0 значит всё в порядке!
 return 0;
// P.S.: комментарии писались много дольше самой проги!!!
}


Скрипун 26.05.2006 00:21

на АС думаю перенести не составит проблем...

World Architect 26.05.2006 09:43

В стандартной библиотеке C++ стоит фиговый генератор псевдослуч чисел.
Если хочешь иметь нормальный, используй библиотеку Boost. Там можно даже распределение случайной величины выбрать.

Alex T 26.05.2006 14:42

всем спасибо за советы...

World Architect:
еще вопрос - библиотеку boost.dll? и почему именно ее?

Скрипун 27.05.2006 15:06

не boost.dll а boost.h , уже сказали почему...

Лучше напиши свою :)

Nox Noctis 28.05.2006 13:58

Цитата:

Сообщение от Скрипун
Вообщето я знаю многих которые пишут свои myRandom() ф-иии, т.к. уж очень часто наблюдаются сбои в стандартной...

имхо, это глупости.

я всю жизнь использую random() во флэше и не видел таких высоко-точных задач, когда этого не достаточно.

если же требуется какое-то определенное распределение случайных величин - экспоненциальное, по гауссу и т. п., то можно взять соответствующую функцию (изобретать которую не нужно).

Цитата:

заказчик просит использовать С-ный random
а ты не пробовал спросить - зачем? :)
либо у вас какая-то сильно хитрая задача,
либо заказчик просто не понимает, что хрен редьки не слаще.

silin 28.05.2006 22:14

да сказать ему (Заказчику), что именно сишный здесь акурат и подошел, спасибо за подсказку, дескать..

Скрипун 29.05.2006 22:14

А у меня во флэш часто глюки... к примеру если я задам рандомное число до 100 выпадет 24... и так несколько раз подряд.. хотя может и случайность :) А еще у меня морской бой: кораблики почему-то больше по правую сторону располагаются... хотя все случаи равновероятные...


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

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