Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
26th
Окт
Как осуществить в Delphi вихрь Мерсенна?
Posted by Chas under Пост-обзор
Вот чтоб сутра мозги размять попробовал слизать один пример с Си
http://www.math.sci.hiroshima-u.ac.j…ES/mt19937ar.c
{$APPTYPE CONSOLE}
uses
SysUtils;
const n=624; m=397;
UPPER_MASK=$80000000;
LOWER_MASK=$7fffffff;
var mt:array[0..n] of Cardinal;
mti:Integer;
procedure randinit(i:Cardinal);
var k:Integer;
begin
mt[0]:=i and $ffffffff;
for k:=1 to n do begin
mt[k]:=(1812433253 * (mt[k-1] xor (mt[k-1] shr 30)) + k);
mt[k]:=mt[k] and $ffffffff;
end;
mti:=0;
end;
function rand:Cardinal;
var y:Cardinal; kk:integer;
mag01:Array[0..1] of Cardinal;
begin
mag01[0]:=0;mag01[1]:=$9908b0df;
if (mti >= N) then begin
if (mti = N+1) then randinit(5489);
kk:=0; while kk<=(N-M) do begin
y := (mt[kk] and UPPER_MASK) or (mt[kk+1] and LOWER_MASK);
mt[kk] := mt[kk+M] xor (y shr 1) or mag01[y and 1];
inc(kk);
end;
while kk<(N-1) do begin
y := (mt[kk] and UPPER_MASK) or (mt[kk+1] and LOWER_MASK);
mt[kk] := mt[kk+(M-N)] or (y shr 1) xor mag01[y and 1];
inc(kk);
end;
y := (mt[N-1] and UPPER_MASK)or(mt[0] and LOWER_MASK);
mt[N-1] := mt[M-1] xor (y shr 1) xor mag01[y and 1];
mti := 0;
end;
y := mt[mti];inc(mti);
y := y xor (y shr 11);
y := y xor ((y shl 7) and $9d2c5680);
y := y xor ((y shl 15) and $efc60000);
y := y xor (y shr 18);
result:=y;
end;
var i:integer;
begin
randinit(5489);
for i:=0 to 10 do
writeln(rand);readln;
{ TODO -oUser -cConsole Main : Insert code here }
end.
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)