Size: a a a

2021 July 18

AS

Alexey Stavrov in Modern::Perl
Я не в курсе был.
источник

AS

Alexey Stavrov in Modern::Perl
idiv выполняется не сильно дольше, чем умножение.
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
сильно
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
целочисленное умножение -- пара тактов.
источник

AS

Alexey Stavrov in Modern::Perl
По ссылке выше:
умножение - 1-7 тактов
деление - 12-44
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
For Skylake, we have 36 uops and 35-88 cycles of latency for a 64-bit div, and for idiv it is even worse: 57 uops and 42 to 95 cycles of latency. These can execute one every 20 to 80 cycles, so the throughput is fully twenty to eighty times worse than 64-bit multiplication.
источник

AS

Alexey Stavrov in Modern::Perl
Ну 44 - это прям много)
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
по сравнению с одним такотом -- аж на два порядка почти
источник

AS

Alexey Stavrov in Modern::Perl
Короче, мы знаем то, на что делим, поэтому можно заменять на умножение
источник

AS

Alexey Stavrov in Modern::Perl
В перле, правда, хз, как это сделать, а в Си можно использовать переполнение инта, как остаток на деление)
источник

AS

Alexey Stavrov in Modern::Perl
Господи, даже floating point division выполняется быстрее...
источник

SZ

Sergey Zhmylove in Modern::Perl
Пф, как будто наличия ssh доступа к системе с возможностью записи файлов на не noexec фс недостаточно
источник

AS

Alexey Stavrov in Modern::Perl
@PerlBanjoBot
my $MOD=2053;
my $gen = 1501;
sub _next { CORE::state $x = 1; $x = ($x * $gen) % $MOD;  };
say _next for 0 .. 10;
источник

P

PerlBanjoBot in Modern::Perl
Global symbol "$MOD" requires explicit package name (did you forget to declare "my $MOD"?) at script.pl line 9.
Global symbol "$gen" requires explicit package name (did you forget to declare "my $gen"?) at script.pl line 10.
Global symbol "$x" requires explicit package name (did you forget to declare "my $x"?) at script.pl line 11.
Global symbol "$x" requires explicit package name (did you forget to declare "my $x"?) at script.pl line 11.
Global symbol "$x" requires explicit package name (did you forget to declare "my $x"?) at script.pl line 11.
Global symbol "$gen" requires explicit package name (did you forget to declare "my $gen"?) at script.pl line 11.
Global symbol "$MOD" requires explicit package name (did you forget to declare "my $MOD"?) at script.pl line 11.
Execution of script.pl aborted due to compilation errors.
https://PerlBanjo.com/7c5809a017
источник

SZ

Sergey Zhmylove in Modern::Perl
Че эт? И почему мне? :))
источник

AS

Alexey Stavrov in Modern::Perl
О боже, это случайно. Видимо кнопку вверх нажал
источник

AS

Alexey Stavrov in Modern::Perl
@PerlBanjoBot
my $MOD=2053;
my $gen = 1501;
sub _next { CORE::state $x = 1; $x = ($x * $gen) % $MOD;  };
say _next for 0 .. 10;
источник

P

PerlBanjoBot in Modern::Perl
1501
860
1576
520
380
1699
373
1457
512
690
978
https://PerlBanjo.com/37893f44a0
источник

AS

Alexey Stavrov in Modern::Perl
Это то, про что я писал, как бы я намутил генерацию псевдослучайных чисел. Покрайней мере выгялдят случайно)

Причём каждое число будет использовано ровно 1 раз. Random такой гарантии не даёт)

Тут ещё нужно учесть, что значаения от 2048 до 2052 нужно прогнорировать и просто вызывать следующий.
источник