Автор Тема: Rand() и osx  (Прочетена 663 пъти)

Stratovarius

  • Участник
  • *****
  • Публикации: 179
    • Профил
Rand() и osx
« -: Oct 21, 2007, 11:30 »
Това е кода с който си вземам случайно число:

Примерен код
srand(time(0));
z = (int) (((double)rand() / ((double)(RAND_MAX) + (double)(1))) *100);


У нас на Mac OS X не работи. В университета го качвам и работи, предполагам че има нещо общо с стойността на RAND_MAX, връща винаги z=2 у нас.

някакви идеи ?
Активен

task_struct

  • Участник
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Rand() и osx
« Отговор #1 -: Oct 21, 2007, 13:07 »
Притеснява ме деленето. Ако rand() върне малко число (спрямо RAND_MAX), ще се получи стойност, клоняща към 0. При умножението по 100 може да се получи отрязване на част от стойността. Това зависи oт вида компилатора, процесора и размера на паметта, в която се прази променливата.
 Също така крайния резултат ти е int. Стройност от сорта на 0.000004234234 в int e 0 .



Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

Stratovarius

  • Участник
  • *****
  • Публикации: 179
    • Профил
Rand() и osx
« Отговор #2 -: Oct 21, 2007, 14:41 »
И на мен ми беше странно, аз бих написал само rand() % 100, за да получа число между 0 и сто, но прочетох в един туториал че е грешно така понеше взимам под внимание само долните битове на числото и по малко случайно там беше описана от мен ползваната формула:

http://members.cox.net/srice1/random/crandom.html

която работи в университета, а у нас не ?

В университета работи с
gcc version 3.3.5 20050117 (prerelease) (SUSE Linux)
А у нас с не: gcc version 4.0.1 (Apple Computer, Inc. build 5367)



Активен

tarator

  • Участник
  • *****
  • Публикации: 849
    • Профил
Rand() и osx
« Отговор #3 -: Oct 21, 2007, 18:45 »
Ами примера ти показва, че умниците, измислили гениалната формула, по която смяташ не са чак толкова умни колкото си мислят '<img'> Очевидно алгоритъма им не работи добре за случайната функция на Мака. Предполагам, че при тяхната функция ниските битове са по-случайни от високите. Между другото, ако направиш srand(), rand(), rand(), втория резултат е достатъчно случаен.
Активен

A gentleman is one who is never rude unintentionally. - Noel Coward

Stratovarius

  • Участник
  • *****
  • Публикации: 179
    • Профил
Rand() и osx
« Отговор #4 -: Oct 21, 2007, 19:12 »
всъщност проблема се корени в gcc.

Във версия 4.0 и на горе има друго  API за генериране на случайни числа.

И в manна версия 3.* пише да не се ползва rand() % x;

ще прочета целия ман и ще го предам така че да върви на унито, компилирано на gcc 3,  но ще разнищя ситуацията
Активен