Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ошибка в функции, переписаной с си на php

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
spheere
Отправлено: 22 Августа, 2009 - 13:15:22
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Авг. 2008  


Помог: 0 раз(а)




Вобщем переписал функцию с си на php, и она стала неправильно работать.
Подскажите что нужно исправить.
CODE (c):
скопировать код в буфер обмена
  1. unsigned int myrandn = 0;
  2.  
  3. int myrand(unsigned int max) {
  4.     myrandn = (myrandn * 0x8088405) + 1;
  5.     return( ((long long)myrandn * max) >> 32 );
  6. }


CODE (php):
скопировать код в буфер обмена
  1. $myrandn = 0;
  2.  
  3. function myrand($max) {
  4.     GLOBAL $myrandn;
  5.  
  6.     $myrandn = ($myrandn * 0x8088405) + 1;
  7.     return (($myrandn * $max) >> 32);
  8. }


В си не силен, насчет (long long) почитал тут http://gcc[dot]gnu[dot]org/onlinedocs/gcc/Long-Long[dot]html но мало что понял.
Помогите пожалуйста.
 
 Top
Nestor
Отправлено: 22 Августа, 2009 - 13:28:11
Post Id



Частый гость


Покинул форум
Сообщений всего: 220
Дата рег-ции: Март 2009  


Помог: 0 раз(а)




"неправильно" это как?


-----
Aurus CMS
 
 Top
spheere
Отправлено: 22 Августа, 2009 - 13:48:07
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Авг. 2008  


Помог: 0 раз(а)




PHP функция возвращает не такие-же значения как функция на си. Другие сталобыть. При одинаковых входных данных. Если например сделать $myrandn = 849521; , а в функцию передать $max=8; то возращаемые значения не совпадают.
 
 Top
EuGen Администратор
Отправлено: 22 Августа, 2009 - 14:02:38
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




И не будет
1)long long - это целые числа 64 разрядов.
2)0x8088405 = 134775813
3)Целые числа в php - это просто longint, то есть максимум до 2147483647
Иначе говоря, получаем, что в диапазон целых чисел выражение (myrandn * 0x8088405) влезет, только если операнд меньше 16.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Champion Супермодератор
Отправлено: 23 Августа, 2009 - 15:59:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




spheere, попробуй использовать не int, а double
 
 Top
EuGen Администратор
Отправлено: 23 Августа, 2009 - 17:48:17
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




..Или задумайтесь о необходимости данной функции


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
spheere
Отправлено: 23 Августа, 2009 - 19:26:30
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Авг. 2008  


Помог: 0 раз(а)




EuGen, функция нужна 100%. Из нее получается необходимая последовательность чисел.
Champion, спасибо, пробую.
 
 Top
EuGen Администратор
Отправлено: 23 Августа, 2009 - 23:38:45
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




О типах данных в php -
http://php.su/learnphp/datatypes/


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB