Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Мне кажется, дело привычки. Я в свое время много общался транслитом (тяжелое детство, да), СМС-ки, обратно же.
Но непривычно, когда другая система кодирования, скажем, я пишу я как ya, и когда вижу ja, глаз режет.
Стандартный ранд ведь использует линейный конгруэнтный метод? Тогда не лучше ли брать (rand()*3)>>32, вместо взятия по модулю, которое быстро зациклится?
Результат тот же, но лишних операций дохрена.
А всего-то надо умножить randseed на три (одной командой mul), получить результат в регистрах eax и edx, и вернуть содержимое edx (там старшие 32 бита).
>Вещественное умножение, где можно обойтись целым?
Ну и ладно. Если что, всё ещё в силе целочисленное деление, написанное выше. Поверь, если будет тормозить под профлаером это место - исправлю.
Отрезок от нуля до 2^32-1 делится на n равных промежутков. Беря (long long int)rand()*n >> 32, мы получаем номер этого промежутка.
В system.pas загляните, короче.
Вообще, слышь, я посмотрел твой трамвайный симулятор и желание сраться отпало как-то. Молодец. Большей частью всякие пидорасы срутся, которые нихуя не могут, а тут даже нормально все.
Молодец, так вот в следующий раз не начинай разговор с поста, который:
1. Содержит наезд
2. Не содержит информации
3. Содержим воду.
Третий пункт из этих - самый страшный. Помню, я в первом говнокое ругал компилятор Дельфей за то, что он простую операцию скомпилировал как вызов функции, так один мудозвор на 3 огромных поста доказывал, что подпрограммы - это круто, так как они повышают структурность кода, доказывал, что я ненавижу язык, и что все, кто ненавидят язык - мудаки. Зря я его сразу не послал нахуй, всё равно из тех 100 постов, что мы напиздели, ничего полезного не было.
Komp Zaberaet
Но непривычно, когда другая система кодирования, скажем, я пишу я как ya, и когда вижу ja, глаз режет.
И я им не пользуюсь:)
Вообще, стандарты бывают глупые. Взять хоть то, что у нас в стандарте раскладки запятая набирается с шифтом.
Стандартный ранд ведь использует линейный конгруэнтный метод? Тогда не лучше ли брать (rand()*3)>>32, вместо взятия по модулю, которое быстро зациклится?
Да и то не наверняка.
В данном случае лучше всего подходит что-то типа:
А всего-то надо умножить randseed на три (одной командой mul), получить результат в регистрах eax и edx, и вернуть содержимое edx (там старшие 32 бита).
Чего?
Одно деление. Где лишние операции? Можно просто сделать одно умножение. Это непроблема.
Ну и ладно. Если что, всё ещё в силе целочисленное деление, написанное выше. Поверь, если будет тормозить под профлаером это место - исправлю.
В system.pas загляните, короче.
Я понял к чему ты клонишь. 64 битные числа тоже не так хорошо.
Да и кто тебе такое сказал, что MAX_RAND = 2^32-1?
В плане скорости? Блин, перемножение 32-битных чисел командой mul автоматом даёт 64-битный результат в eax и edx. Нам нужно содержимое edx, всё.
Можете писать свои ранды на ассемблере сколько угодно.
Можете даже винду переписать на ассемблере, там же наверняка где-то можно заменить что-то на mul и вытащить результаты из регистров...
"Все мы потомки макак и предки богов."
Под воздействием науки
Только дети или внуки станут может быть людьми
Научи как нибудь на досуге инт на 32 бита сдвигать, авось и впрямь пиздато.
В общем сорики.
1. Содержит наезд
2. Не содержит информации
3. Содержим воду.
Третий пункт из этих - самый страшный. Помню, я в первом говнокое ругал компилятор Дельфей за то, что он простую операцию скомпилировал как вызов функции, так один мудозвор на 3 огромных поста доказывал, что подпрограммы - это круто, так как они повышают структурность кода, доказывал, что я ненавижу язык, и что все, кто ненавидят язык - мудаки. Зря я его сразу не послал нахуй, всё равно из тех 100 постов, что мы напиздели, ничего полезного не было.