За последние 24 часа нас посетили 17958 программистов и 1613 роботов. Сейчас ищут 1443 программиста ...

ГПСЧ на РНР (сугубо для самообразования)

Тема в разделе "Решения, алгоритмы", создана пользователем Vladson, 11 мар 2008.

  1. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Он нам и не нужен

    Тогда при $rnd->seed(5, 90, 37); будет

    а надо
    (на ассемблере вроде именно так)
     
  2. guest2013

    guest2013 Активный пользователь

    С нами с:
    19 ноя 2007
    Сообщения:
    109
    Симпатии:
    0
    Ну как же не нужен!? Команда rcl проварачивает регистр через CF флаг, а CF устанавливается командой add. Т.е.:
    Код (Text):
    1.  
    2.    add ax,dx         ; устанавливается флаг CF
    3.    rcl ax,1            ; Происходит следующее:
    4.                           ; tmp=ax[15], ax[15]=ax[14], ..., ax[1]=ax[0], ax[0]=CF, CF=tmp
    UPDATE
    P.S. Надо бы проверить, может тогда и период последовательности будет 2^16.
     
  3. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    guest2013
    Понял где я накасячил.

    Дело в том что это я как раз на x86-asm перепутал, там не rcl должен быть а rol.
    (на x86-asm я переписывал с z80-asm и там был rcl но на z80 rcl это не через флаг переноса)

    Так что РНР код у меня правильный, а вот на asm ошибка.
     
  4. guest2013

    guest2013 Активный пользователь

    С нами с:
    19 ноя 2007
    Сообщения:
    109
    Симпатии:
    0
    Вот кусок кода:
    PHP:
    1. <?
    2. // Константы взяты из Сишной библиотеки
    3. define("_RND_CONST_A_",214013);
    4. define("_RND_CONST_B_",2531011);
    5. // _RND_CONST_M_: 2^32
    6. ...
    7.  
    8. // Получение очередного числа последовательности. Диапазон значений - весь int (от ~-2млрд. до ~+2млрд.)
    9. // Период повторения, естественно 2^32
    10. $Seed=(int)($Seed*_RND_CONST_A_+_RND_CONST_B_);
    11. // ### UPDATE ### Если уж совсем по сишному, то
    12. // return ($Seed>>16) & 0x7fff; // Диапазон: 0-32767, период повторения: 2^31
    13.  
    14. ..
    15.