如何在Delphi中获得64位随机值?

ble*_*tin 5 delphi random delphi-2006

如何在Delphi 2006中创建随机的64位整数值?内置的基于整数的Random()函数似乎只返回0到2 ^ 31之间的值.

gab*_*abr 16

你可以使用我的GpRandomGen.它实现了Marsaglia/Zaman/James算法,速度极快,据说非常随机.作为免费软件发布.

  • GpRandomGen`是`原生Delphi.它不依赖于COM,.NET,ASM等.它包含对原始发表的研究文章的引用,归属于原始C实现,等等.您还想要什么? (4认同)
  • 实际上,该算法附带了文本("最佳随机生成器").我只是在转换源代码时复制了完整的标题. (4认同)
  • @blerontin我不认为有任何过度自信.@gabr并不是指他的实现是最好的,而是他意味着算法(不是由于他)是最着名的RNG.这对我来说似乎完全合理 (2认同)

Dav*_*nan 10

生成两个32位的randoms并将它们拼接在一起.

编辑

与@ Andreas的回答类似,我喜欢以下(等效)实现:

function Random64: UInt64;
var
  Overlay: packed record
    a, b: UInt32;
  end absolute Result;
begin
  Assert(SizeOf(Overlay)=SizeOf(Result));
  Overlay.a := Random32;
  Overlay.b := Random32;
end;
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用在SysUtils中声明的Int64Rec转换结果,不需要声明另一个结构:Int64Rec(Result).Hi:= Random32; Int64Rec(Result).Lo:= Random32; (4认同)