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
Форумы портала PHP.SU :: Версия для печати :: Ошибка в функции, переписаной с си на php
Форумы портала PHP.SU » PHP » Программирование на PHP » Ошибка в функции, переписаной с си на php

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

1. spheere - 22 Августа, 2009 - 13:15:22 - перейти к сообщению
Вобщем переписал функцию с си на 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 но мало что понял.
Помогите пожалуйста.
2. Nestor - 22 Августа, 2009 - 13:28:11 - перейти к сообщению
"неправильно" это как?
3. spheere - 22 Августа, 2009 - 13:48:07 - перейти к сообщению
PHP функция возвращает не такие-же значения как функция на си. Другие сталобыть. При одинаковых входных данных. Если например сделать $myrandn = 849521; , а в функцию передать $max=8; то возращаемые значения не совпадают.
4. EuGen - 22 Августа, 2009 - 14:02:38 - перейти к сообщению
И не будет
1)long long - это целые числа 64 разрядов.
2)0x8088405 = 134775813
3)Целые числа в php - это просто longint, то есть максимум до 2147483647
Иначе говоря, получаем, что в диапазон целых чисел выражение (myrandn * 0x8088405) влезет, только если операнд меньше 16.
5. Champion - 23 Августа, 2009 - 15:59:27 - перейти к сообщению
spheere, попробуй использовать не int, а double
6. EuGen - 23 Августа, 2009 - 17:48:17 - перейти к сообщению
..Или задумайтесь о необходимости данной функции
7. spheere - 23 Августа, 2009 - 19:26:30 - перейти к сообщению
EuGen, функция нужна 100%. Из нее получается необходимая последовательность чисел.
Champion, спасибо, пробую.
8. EuGen - 23 Августа, 2009 - 23:38:45 - перейти к сообщению
О типах данных в php -
http://php.su/learnphp/datatypes/

 

Powered by ExBB FM 1.0 RC1