From d8ad0cfd14fee87326c0ca5541d42bf86d93081c Mon Sep 17 00:00:00 2001 From: Xiao-Yong Jin Date: Tue, 3 Jan 2023 16:52:36 -0600 Subject: [PATCH 1/2] rng: avoid extreme values in gaussian --- src/rng/milcrng.nim | 7 ++++--- src/rng/mrg32k3a.nim | 5 +++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/rng/milcrng.nim b/src/rng/milcrng.nim index 0dcb2c53..7bcf635d 100644 --- a/src/rng/milcrng.nim +++ b/src/rng/milcrng.nim @@ -148,14 +148,15 @@ proc gaussian*(prn: var RngMilc6): float32 = result = prn.gset else: const - TINY = 9.999999999999999e-308 + MAX = 0x01000000.float + SCALE1 = 1.0 / (MAX + 1.0) var v: cdouble p: cdouble r: cdouble - v = prn.uniform + v = SCALE1 * (prn.uniform * MAX + 1.0) p = prn.uniform * 2.0 * PI - r = sqrt(-2.0 * ln(v + TINY)) + r = sqrt(-2.0 * ln(v)) result = r * cos(p) # Only needed for non-vectorized RNGs. diff --git a/src/rng/mrg32k3a.nim b/src/rng/mrg32k3a.nim index 2f572e67..dde41c8f 100644 --- a/src/rng/mrg32k3a.nim +++ b/src/rng/mrg32k3a.nim @@ -120,6 +120,7 @@ proc seed*(prn: var MRG32k3a; sed,index: auto) {.inline.} = seedIndep(prn, ss, index) proc uniform*(prn:var MRG32k3a):float = + ## Uniform random numbers from 0 to 1, excluding 0 and 1. var p1,p2:float p1 = a12 * prn.s1[1].float - a13n * prn.s1[0].float p1 = p1 mod m1 @@ -145,11 +146,11 @@ proc uniform*(prn:var MRG32k3a):float = proc gaussian*(prn: var MRG32k3a): float = ## Gaussian normal deviate ## Probability distribution exp( -x*x/2 ), so < x^2 > = 1 - const TINY = 9.999999999999999e-308 + # uniform excludes 0 and 1 var v,p,r: float v = prn.uniform p = prn.uniform * 2.0 * PI - r = sqrt(-2.0 * ln(v + TINY)) + r = sqrt(-2.0 * ln(v)) result = r * cos(p) import maths/types From 2e0a0cd80cb47a347aa1ca074dc35a64aeeed484 Mon Sep 17 00:00:00 2001 From: Xiao-Yong Jin Date: Tue, 3 Jan 2023 17:04:04 -0600 Subject: [PATCH 2/2] github/workflow: use ci/funs.sh in Nim to bootstrap Nim for different versions --- .github/workflows/test.yml | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 688148b3..22127f17 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -45,22 +45,16 @@ jobs: repository: nim-lang/Nim ref: ${{ matrix.nim-branch }} path: Nim - - name: checkout Nim csources - uses: actions/checkout@v3 - with: - repository: nim-lang/csources_v1 - path: Nim/csources - name: set path to nim run: echo "${{ github.workspace }}/Nim/bin" >> $GITHUB_PATH - - name: build Nim csources - working-directory: Nim/csources - run: make -j $(nproc) - name: build Nim & nimble working-directory: Nim run: | - nim c koch - ./koch boot -d:release -d:danger - ./koch nimble -d:release -d:danger + . ci/funs.sh + nimBuildCsourcesIfNeeded + ./bin/nim c --noNimblePath --skipUserCfg --skipParentCfg --hints:off koch + ./koch boot -d:release -d:danger --skipUserCfg --skipParentCfg --hints:off + ./koch nimble -d:release -d:danger --skipUserCfg --skipParentCfg --hints:off - name: checkout uses: actions/checkout@v3 with: