Nim 编程语言实现超级简单的高斯分布

mac2026-05-13  0

高斯分布(gauss) 常用的一种分布,这一节我们来介绍如何产生符合高斯分布的随机数。 Nim 语言是一门高效而优雅的系统级编程语言,可以编译成 C, C++, javascript 等后端。 官网如下:https://nim-lang.org/ 中文官网:https://nim-cn.com/ 根据中央极限定理,当 N 足够大的时候,我们可以使用 x = sum(ri) - 6,ri 为 0, 1之间的 均匀分布,gauss = mu + sigma * x 来逼近高斯分布。其中 mu 为高斯分布的均值,而 sigma 为高斯分布的方差。

# 正态分布的随机数 # N(mu, sigma) proc gauss*[T: SomeFloat](mu, sigma: T, n: int = 12): T = var x: float for i in 1 .. n: # randomize() x += rand(1.0) x -= 6.0 result = mu + sigma * T(x)

下面,我们来检验一下结果,需要安装使用 nimble install plotly 等命令安装绘图库

when isMainModule: import plotly, sugar, sequtils, chroma, os randomize() var res: seq[float] for i in 1 .. 1000000: res.add gauss[float](0, 1) var colors = @[Color(r: 0.1, g: 0.1, b: 0.9, a: 1.0)] var d = Trace[float](`type`: PlotType.Histogram,nbins:5000) var size = @[1.float] d.marker = Marker[float](size: size, color: colors) d.xs = res # d.xs = toSeq(1 .. d1.size).map(x => x / 16000) # d.xs = frame2Time(d1.size, 200, 80, 16000) # d.ys = d1.toSeq d.text = @["hello", "data-point", "third", "highest", "<b>bold</b>"] var layout = Layout(title: "gauss", width: 1200, height: 400, xaxis: Axis(title: "x"), yaxis: Axis(title: "y"), autosize: false) var p = Plot[floavt](layout: layout, traces: @[d]) # 保存图像 if not existsDir("./generate"): createDir("./generate") # run with --threads:on p.show(filename = "generate/display.jpg")

在命令行输入 nim c -r --threads:on test.nim 基本吻合标准正太分布的要求。 Nim 中文社区:https://nim-cn.com/

最新回复(0)