FsRandom.Pcg 1.4.0

dotnet add package FsRandom.Pcg --version 1.4.0                
NuGet\Install-Package FsRandom.Pcg -Version 1.4.0                
此命令意在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="FsRandom.Pcg" Version="1.4.0" />                
对于支持 PackageReference 的项目,将此 XML 节复制到项目文件中以引用软件包。
paket add FsRandom.Pcg --version 1.4.0                
#r "nuget: FsRandom.Pcg, 1.4.0"                
#r 指令可以在 F# Interactive 和 Polyglot Notebooks 中使用。将此复制到交互工具或脚本的源代码中以引用软件包。
// Install FsRandom.Pcg as a Cake Addin
#addin nuget:?package=FsRandom.Pcg&version=1.4.0

// Install FsRandom.Pcg as a Cake Tool
#tool nuget:?package=FsRandom.Pcg&version=1.4.0                

F# 的 PCG 伪随机数生成器

NuGet AppVeyor

关于 PCG

PCG 是一族简单的快速空间高效统计良好的随机数生成算法。与许多通用 RNG 不同,它们也难以预测。你可以在 此处 了解更多关于 PCG 的信息。

System.Random 不太理想

System.Random 存在一些可能不适合某些用户的问题。具体来说

  • 它使用一种隐晦的算法来生成随机数。

    根据微软的说法:

    Random 类的当前实现基于 Donald E. Knuth 的减法随机数生成器算法。更多信息,请参阅 D. E. Knuth. "The Art of Computer Programming, volume 2: Seminumerical Algorithms". Addison-Wesley, Reading, MA, 第二版,1981。

    尝试用谷歌搜索。然后,搜索“梅森迭代器”或“线性同余发生器”。你看出区别了吗?这种算法的神秘性很重要。虽然它是被一位备受尊敬的计算机科学家设计的,但它的输出可能并不足够随机,甚至更糟,它可以被轻易预测。想象一下你在玩游戏,而你的对手可以预测骰子的滚动或洗牌的顺序。《可预测性》直接违反了随机性的定义。虽然没有任何软件可以生成完全随机的材料,但它可以提供一个不错的尝试;并且做得很好。此外,System.Random的实现存在严重缺陷

  • 这一点更针对F#用户,但,无论底层算法如何,System.Random类具有可变状态,这是功能程序设计的反模式。例如,使用不可变值,在像C#这样的有状态、命令式语言中再次生成相同的随机流可能有点困难。使用System.Random的成本是添加副作用,这是功能程序员惧怕的事情。但别担心。F#有一个用于功能随机数生成的良好库(链接)

PCG更好

出自此处(有修改)

  • 它非常容易使用,同时非常灵活,并提供了强大的功能(其中一些功能在这个库中还没有提供)(包括一些允许你做愚蠢的派对把戏的功能)。
  • 它速度很快,并且可以占用非常小的空间(只有32字节的州,与System.Random的232字节状态相比,以及梅森迭代器的2.5 KiB内部状态相比)。
  • 其代码大小较小。
  • 统计测试中的性能极佳(详情请参阅PCG论文)。
  • 它比大多数生成器都有更低的可预测性,因此更安全,尽管我不会建议将其用于加密应用。
  • 参考实现是开源软件,许可证是许可性质的(Apache许可证)。

文档

库的文档在wiki中。您还可以检查源代码注释。

产品 兼容的和额外的计算目标框架版本。
.NET net5.0 已计算。  net5.0-windows 已计算。  net6.0 已计算。  net6.0-android 已计算。  net6.0-ios 已计算。  net6.0-maccatalyst 已计算。  net6.0-macos 已计算。  net6.0-tvos 已计算。  net6.0-windows 已计算。  net7.0 已计算。  net7.0-android 已计算。  net7.0-ios 已计算。  net7.0-maccatalyst 已计算。  net7.0-macos 已计算。  net7.0-tvos 已计算。  net7.0-windows 已计算。  net8.0 已计算。  net8.0-android 已计算。  net8.0-browser 已计算。  net8.0-ios 已计算。  net8.0-maccatalyst 已计算。  net8.0-macos 已计算。  net8.0-tvos 已计算。  net8.0-windows 已计算。 
.NET Core netcoreapp2.0 已计算。  netcoreapp2.1 已计算。  netcoreapp2.2 已计算。  netcoreapp3.0 已计算。  netcoreapp3.1 已计算。 
.NET Standard netstandard2.0 兼容。  netstandard2.1 已计算。 
.NET Framework net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解更多关于 目标框架.NET Standard

NuGet 包

此包没有被任何 NuGet 包使用。

GitHub 仓库

此包没有被任何流行的 GitHub 仓库使用。

版本 下载 最后更新
1.4.0 27,484 12/4/2017
1.3.0 1,002 6/16/2017
1.2.0 1,092 4/18/2017
1.1.1 1,052 4/7/2017
1.0.1 1,068 4/2/2017
1.0.0 1,057 3/24/2017

将 FsRandom 的源代码集成到项目中。
FsRandom 进行了一些改进(`ref` 变成了 `mutable` 等)。
该库现在仅针对 .NET Standard 2.0。
今天是美好的一天。现在不应该有任何重要的事情。