mt_rand, баг?

Opik

Новичок
mt_rand, баг?

PHP:
 function ifTrue($percent)
 {
           return $percent > mt_rand()&100 ? 1 : 0;
 }
 print ifTrue(100); // всегда 0
если заменить mt_rand()&100 на mt_rand(0, 100) или же на
PHP:
 function ifTrue($percent)
 {
          $rand = mt_rand()&100;
           return $percent > $rand ? 1 : 0;
 }
работает корректно. PHP 5.1
Это баг PHP или это просто некорретная конструкция?
 

Opik

Новичок
svetasmirnova
хм, ок, не считал mt_rand()&100 несколькими операциями.
спасибо.
 

SiMM

Новичок
> не считал mt_rand()&100 несколькими операциями.
[m]mt_rand[/m]
[m]language.operators.bitwise[/m]

> заменить mt_rand()&100 на mt_rand(0, 100)
Это две совершенно разные вещи.
 

Demiurg

Guest
Opik
советую подучить синтаксис. Вобще mt_rand()&100 имеет давольно странный, для мен, смысл.
 

si

Administrator
советую подучить синтаксис. Вобще mt_rand()&100 имеет давольно странный, для мен, смысл.
смысл этой конструкци действительно понять очень сложно

-~{}~ 08.07.05 11:23:

наврено в место & должно быть %
 

Opik

Новичок
mt_rand()&100 = mt_rand(0, 100)
я не помню, где я это нашел. :)))
"наврено в место & должно быть % ". нет, именно так.
например mt_rand()&50 = mt_rand(0, 50), и так далее.

"советую подучить синтаксис" спасибо, но не нужно. Когда я увидел эту конструкцию я тоже немного не понял. но понравилась она мне больше :) ок, mt_rand(0, 100), значит :)
 

Demiurg

Guest
Opik
это не конструкция ... и все твои утверждения в последнем посте ошибочны, даже про то, что не нужно подучить синтаксис.
 

Opik

Новичок
si
тот же самый что в mt_rand(0, 50).
Demiurg
Я нашел такой вариант, он работал корректно (до данной ситуации). В чем моя ошибка? Может только в том, что мне этот вариант понравился. Теперь вы мне сообщаете что он некорретный, поверю, ведь в мане и вправду нет примера такого синтаксиса.
и все твои утверждения в последнем посте ошибочны
я конечно соглашусь что я не прав. частично.
mt_rand()&100 = mt_rand(0, 100) - чем не идентичность? проверь резульаты, оба работают и выдают случайные числа от 0 до 100.
 

SiMM

Новичок
> оба работают и выдают случайные числа от 0 до 100.
Это заблуждение. Ссылки для того, чтобы развеять это заблуждение, я уже давал выше - не вижу смысла повторяться.
mt_rand()&100 вообще может давать в результате лишь одно из чисел ряда 0,4,32,36,64,68,96,100
 

Opik

Новичок
SiMM
Demiurg
ок, спорить не буду. но всё равно это интересный вариант :)
 

SiMM

Новичок
> ок, спорить не буду
Спорить не надо. Надо пойти и прочитать мануал. Чтобы понять, что
mt_rand(0,100) даёт любое число от 0 до 100,
а mt_rand()&100 - любое из ряда 0,4,32,36,64,68,96,100
Если вы не видите разницу - остаётся вам только посочувствовать.
 

Profic

just Profic (PHP5 BetaTeam)
ни нифига себе, Opik перестань пороть чушь
mt_rand()&100 (именно с &) выдает числа у которых в двоичной записи 2, 5 или 6 биты установлены в 1. Никаких других чисел эта консрукция выдать не может по определению.
 

si

Administrator
Opik
юноша читайте молча линки что вам дали выше и думайте над прочитанным до просветления и хватит тут нести чушь
 

Opik

Новичок
SiMM
да, теперь я точно уверен, что заблуждался.
а mt_rand()&100 - любое из ряда 0,4,32,36,64,68,96,100
этого я не видел, жаль. стало всё на свои места.
si
см. выше.

Сорри за неуместное упорство.
 
Сверху