mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-12 19:44:05 +09:00
New RNG for the game and Joise
Former-commit-id: 4a5b7f7ef6546d04be106d881e7d3f9dd6dc1b57 Former-commit-id: 90c15fa64cde39e33206ff7be645db9bceda1161
This commit is contained in:
@@ -1,91 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2013 Jason Taylor.
|
|
||||||
* Released as open-source under the Apache License, Version 2.0.
|
|
||||||
*
|
|
||||||
* ============================================================================
|
|
||||||
* | Joise
|
|
||||||
* ============================================================================
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013 Jason Taylor
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*
|
|
||||||
* ============================================================================
|
|
||||||
* | Accidental Noise Library
|
|
||||||
* | --------------------------------------------------------------------------
|
|
||||||
* | Joise is a derivative work based on Josua Tippetts' C++ library:
|
|
||||||
* | http://accidentalnoise.sourceforge.net/index.html
|
|
||||||
* ============================================================================
|
|
||||||
*
|
|
||||||
* Copyright (C) 2011 Joshua Tippetts
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
|
||||||
* arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any purpose,
|
|
||||||
* including commercial applications, and to alter it and redistribute it
|
|
||||||
* freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you must not
|
|
||||||
* claim that you wrote the original software. If you use this software
|
|
||||||
* in a product, an acknowledgment in the product documentation would be
|
|
||||||
* appreciated but is not required.
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
* misrepresented as being the original software.
|
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.sudoplay.joise.generator;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Complimentary multiply with carry.
|
|
||||||
*/
|
|
||||||
public class CMWC4096 extends BasePRNG {
|
|
||||||
|
|
||||||
protected int c;
|
|
||||||
protected int[] Q = new int[4096];
|
|
||||||
protected LCG lcg = new LCG();
|
|
||||||
protected int i;
|
|
||||||
|
|
||||||
public CMWC4096() {
|
|
||||||
setSeed(10000);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int get() {
|
|
||||||
long t;
|
|
||||||
long a = 18782L;
|
|
||||||
long b = 4294967295L;
|
|
||||||
int r = (int) (b - 1);
|
|
||||||
i = (i + 1) & 4095;
|
|
||||||
t = a * Q[i] + c;
|
|
||||||
c = (int) (t >> 32);
|
|
||||||
t = (t & b) + c;
|
|
||||||
if (t > r) {
|
|
||||||
c++;
|
|
||||||
t = t - b;
|
|
||||||
}
|
|
||||||
return Q[i] = (int) (r - t);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setSeed(long seed) {
|
|
||||||
lcg.setSeed(seed);
|
|
||||||
for (int i = 0; i < 4096; i++) {
|
|
||||||
Q[i] = lcg.get();
|
|
||||||
}
|
|
||||||
c = lcg.getTarget(18781);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2013 Jason Taylor.
|
|
||||||
* Released as open-source under the Apache License, Version 2.0.
|
|
||||||
*
|
|
||||||
* ============================================================================
|
|
||||||
* | Joise
|
|
||||||
* ============================================================================
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013 Jason Taylor
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*
|
|
||||||
* ============================================================================
|
|
||||||
* | Accidental Noise Library
|
|
||||||
* | --------------------------------------------------------------------------
|
|
||||||
* | Joise is a derivative work based on Josua Tippetts' C++ library:
|
|
||||||
* | http://accidentalnoise.sourceforge.net/index.html
|
|
||||||
* ============================================================================
|
|
||||||
*
|
|
||||||
* Copyright (C) 2011 Joshua Tippetts
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
|
||||||
* arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any purpose,
|
|
||||||
* including commercial applications, and to alter it and redistribute it
|
|
||||||
* freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you must not
|
|
||||||
* claim that you wrote the original software. If you use this software
|
|
||||||
* in a product, an acknowledgment in the product documentation would be
|
|
||||||
* appreciated but is not required.
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
* misrepresented as being the original software.
|
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.sudoplay.joise.generator;
|
|
||||||
|
|
||||||
public class KISS extends BasePRNG {
|
|
||||||
|
|
||||||
protected LCG lcg = new LCG();
|
|
||||||
protected int z, w, jsr, jcong;
|
|
||||||
|
|
||||||
public KISS() {
|
|
||||||
setSeed(10000);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int get() {
|
|
||||||
z = 36969 * (z & 65535) + (z >> 16);
|
|
||||||
w = 18000 * (w & 65535) + (w >> 16);
|
|
||||||
int mwc = (z << 16) + w;
|
|
||||||
jcong = 69069 * jcong + 1234567;
|
|
||||||
jsr ^= (jsr << 17);
|
|
||||||
jsr ^= (jsr >> 13);
|
|
||||||
jsr ^= (jsr << 5);
|
|
||||||
return ((mwc ^ jcong) + jsr);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setSeed(long seed) {
|
|
||||||
lcg.setSeed(seed);
|
|
||||||
z = lcg.get();
|
|
||||||
w = lcg.get();
|
|
||||||
jsr = lcg.get();
|
|
||||||
jcong = lcg.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2013 Jason Taylor.
|
|
||||||
* Released as open-source under the Apache License, Version 2.0.
|
|
||||||
*
|
|
||||||
* ============================================================================
|
|
||||||
* | Joise
|
|
||||||
* ============================================================================
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013 Jason Taylor
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*
|
|
||||||
* ============================================================================
|
|
||||||
* | Accidental Noise Library
|
|
||||||
* | --------------------------------------------------------------------------
|
|
||||||
* | Joise is a derivative work based on Josua Tippetts' C++ library:
|
|
||||||
* | http://accidentalnoise.sourceforge.net/index.html
|
|
||||||
* ============================================================================
|
|
||||||
*
|
|
||||||
* Copyright (C) 2011 Joshua Tippetts
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
|
||||||
* arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any purpose,
|
|
||||||
* including commercial applications, and to alter it and redistribute it
|
|
||||||
* freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you must not
|
|
||||||
* claim that you wrote the original software. If you use this software
|
|
||||||
* in a product, an acknowledgment in the product documentation would be
|
|
||||||
* appreciated but is not required.
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
* misrepresented as being the original software.
|
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.sudoplay.joise.generator;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Linear congruential generator.
|
|
||||||
*/
|
|
||||||
public class LCG extends BasePRNG {
|
|
||||||
|
|
||||||
protected long state;
|
|
||||||
|
|
||||||
public LCG() {
|
|
||||||
setSeed(10000);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int get() {
|
|
||||||
return (int) (state = (25214903917L * state + 11) % 281474976710656L);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setSeed(long seed) {
|
|
||||||
state = (int) seed;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2013 Jason Taylor.
|
|
||||||
* Released as open-source under the Apache License, Version 2.0.
|
|
||||||
*
|
|
||||||
* ============================================================================
|
|
||||||
* | Joise
|
|
||||||
* ============================================================================
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013 Jason Taylor
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*
|
|
||||||
* ============================================================================
|
|
||||||
* | Accidental Noise Library
|
|
||||||
* | --------------------------------------------------------------------------
|
|
||||||
* | Joise is a derivative work based on Josua Tippetts' C++ library:
|
|
||||||
* | http://accidentalnoise.sourceforge.net/index.html
|
|
||||||
* ============================================================================
|
|
||||||
*
|
|
||||||
* Copyright (C) 2011 Joshua Tippetts
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
|
||||||
* arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any purpose,
|
|
||||||
* including commercial applications, and to alter it and redistribute it
|
|
||||||
* freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you must not
|
|
||||||
* claim that you wrote the original software. If you use this software
|
|
||||||
* in a product, an acknowledgment in the product documentation would be
|
|
||||||
* appreciated but is not required.
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
* misrepresented as being the original software.
|
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.sudoplay.joise.generator;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Multiply with carry.
|
|
||||||
*/
|
|
||||||
public class MWC extends BasePRNG {
|
|
||||||
|
|
||||||
protected LCG lcg = new LCG();
|
|
||||||
protected long x;
|
|
||||||
protected long a = 0xffffda61L;
|
|
||||||
|
|
||||||
public MWC() {
|
|
||||||
setSeed(10000);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int get() {
|
|
||||||
return (int) (x = (a * (x & 0xffffffffL)) + (x >>> 32));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setSeed(long seed) {
|
|
||||||
lcg.setSeed(seed);
|
|
||||||
x = lcg.get() & 0xffffffffL;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2013 Jason Taylor.
|
|
||||||
* Released as open-source under the Apache License, Version 2.0.
|
|
||||||
*
|
|
||||||
* ============================================================================
|
|
||||||
* | Joise
|
|
||||||
* ============================================================================
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013 Jason Taylor
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*
|
|
||||||
* ============================================================================
|
|
||||||
* | Accidental Noise Library
|
|
||||||
* | --------------------------------------------------------------------------
|
|
||||||
* | Joise is a derivative work based on Josua Tippetts' C++ library:
|
|
||||||
* | http://accidentalnoise.sourceforge.net/index.html
|
|
||||||
* ============================================================================
|
|
||||||
*
|
|
||||||
* Copyright (C) 2011 Joshua Tippetts
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
|
||||||
* arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any purpose,
|
|
||||||
* including commercial applications, and to alter it and redistribute it
|
|
||||||
* freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you must not
|
|
||||||
* claim that you wrote the original software. If you use this software
|
|
||||||
* in a product, an acknowledgment in the product documentation would be
|
|
||||||
* appreciated but is not required.
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
* misrepresented as being the original software.
|
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.sudoplay.joise.generator;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Multiply with carry.
|
|
||||||
*/
|
|
||||||
public class MWC256 extends BasePRNG {
|
|
||||||
|
|
||||||
protected int[] Q = new int[256];
|
|
||||||
protected int c;
|
|
||||||
protected LCG lcg = new LCG();
|
|
||||||
protected byte b = (byte) 255;
|
|
||||||
|
|
||||||
public MWC256() {
|
|
||||||
setSeed(10000);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int get() {
|
|
||||||
long t;
|
|
||||||
long a = 809430660L;
|
|
||||||
t = a * Q[++b & 0xFF] + c;
|
|
||||||
c = (int) (t >> 32);
|
|
||||||
return Q[b & 0xFF] = (int) t;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setSeed(long seed) {
|
|
||||||
lcg.setSeed(seed);
|
|
||||||
for (int i = 0; i < 256; i++) {
|
|
||||||
Q[i] = lcg.get();
|
|
||||||
}
|
|
||||||
c = lcg.getTarget(809430660);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2013 Jason Taylor.
|
|
||||||
* Released as open-source under the Apache License, Version 2.0.
|
|
||||||
*
|
|
||||||
* ============================================================================
|
|
||||||
* | Joise
|
|
||||||
* ============================================================================
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013 Jason Taylor
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*
|
|
||||||
* ============================================================================
|
|
||||||
* | Accidental Noise Library
|
|
||||||
* | --------------------------------------------------------------------------
|
|
||||||
* | Joise is a derivative work based on Josua Tippetts' C++ library:
|
|
||||||
* | http://accidentalnoise.sourceforge.net/index.html
|
|
||||||
* ============================================================================
|
|
||||||
*
|
|
||||||
* Copyright (C) 2011 Joshua Tippetts
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
|
||||||
* arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any purpose,
|
|
||||||
* including commercial applications, and to alter it and redistribute it
|
|
||||||
* freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you must not
|
|
||||||
* claim that you wrote the original software. If you use this software
|
|
||||||
* in a product, an acknowledgment in the product documentation would be
|
|
||||||
* appreciated but is not required.
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
* misrepresented as being the original software.
|
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.sudoplay.joise.generator;
|
|
||||||
|
|
||||||
public class XORShift extends BasePRNG {
|
|
||||||
|
|
||||||
protected int x, y, z, w, v;
|
|
||||||
protected LCG lcg = new LCG();
|
|
||||||
|
|
||||||
public XORShift() {
|
|
||||||
setSeed(10000);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int get() {
|
|
||||||
int t;
|
|
||||||
t = (x ^ (x >> 7));
|
|
||||||
x = y;
|
|
||||||
y = z;
|
|
||||||
z = w;
|
|
||||||
w = v;
|
|
||||||
v = (v ^ (v << 6)) ^ (t ^ (t << 13));
|
|
||||||
return (y + y + 1) * v;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setSeed(long seed) {
|
|
||||||
lcg.setSeed(seed);
|
|
||||||
x = lcg.get();
|
|
||||||
y = lcg.get();
|
|
||||||
z = lcg.get();
|
|
||||||
w = lcg.get();
|
|
||||||
v = lcg.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
31
src/com/sudoplay/joise/generator/Xorshift128plus.kt
Normal file
31
src/com/sudoplay/joise/generator/Xorshift128plus.kt
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
package com.sudoplay.joise.generator
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by SKYHi14 on 2017-02-20.
|
||||||
|
*/
|
||||||
|
class Xorshift128plus : BasePRNG() {
|
||||||
|
|
||||||
|
private var s0: Long = 0
|
||||||
|
private var s1: Long = 0
|
||||||
|
|
||||||
|
init {
|
||||||
|
setSeed(10000L)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun get(): Int {
|
||||||
|
var x = s0
|
||||||
|
val y = s1
|
||||||
|
s0 = y
|
||||||
|
x = x xor (x shl 23)
|
||||||
|
s1 = x xor y xor (x ushr 17) xor (y ushr 26)
|
||||||
|
return (s1 + y).toInt()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setSeed(seed: Long) {
|
||||||
|
if (seed == 0L)
|
||||||
|
throw IllegalArgumentException("Invalid seed: cannot be zero")
|
||||||
|
|
||||||
|
s0 = (6364136223846793005L * seed + 1442695040888963407L)
|
||||||
|
s1 = (6364136223846793005L * s0 + 1442695040888963407L)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -53,7 +53,7 @@ import static com.sudoplay.joise.noise.Util.clamp;
|
|||||||
import com.sudoplay.joise.ModuleInstanceMap;
|
import com.sudoplay.joise.ModuleInstanceMap;
|
||||||
import com.sudoplay.joise.ModuleMap;
|
import com.sudoplay.joise.ModuleMap;
|
||||||
import com.sudoplay.joise.ModulePropertyMap;
|
import com.sudoplay.joise.ModulePropertyMap;
|
||||||
import com.sudoplay.joise.generator.LCG;
|
import com.sudoplay.joise.generator.Xorshift128plus;
|
||||||
import com.sudoplay.util.Checked;
|
import com.sudoplay.util.Checked;
|
||||||
|
|
||||||
public class ModuleAutoCorrect extends SourcedModule {
|
public class ModuleAutoCorrect extends SourcedModule {
|
||||||
@@ -125,7 +125,7 @@ public class ModuleAutoCorrect extends SourcedModule {
|
|||||||
if (!source.isModule() || locked) return;
|
if (!source.isModule() || locked) return;
|
||||||
|
|
||||||
double mn, mx;
|
double mn, mx;
|
||||||
LCG lcg = new LCG();
|
Xorshift128plus lcg = new Xorshift128plus();
|
||||||
|
|
||||||
// Calculate 2D
|
// Calculate 2D
|
||||||
mn = 10000.0;
|
mn = 10000.0;
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ package com.sudoplay.joise.module;
|
|||||||
import com.sudoplay.joise.ModuleInstanceMap;
|
import com.sudoplay.joise.ModuleInstanceMap;
|
||||||
import com.sudoplay.joise.ModuleMap;
|
import com.sudoplay.joise.ModuleMap;
|
||||||
import com.sudoplay.joise.ModulePropertyMap;
|
import com.sudoplay.joise.ModulePropertyMap;
|
||||||
import com.sudoplay.joise.generator.LCG;
|
import com.sudoplay.joise.generator.Xorshift128plus;
|
||||||
import com.sudoplay.joise.noise.Interpolator;
|
import com.sudoplay.joise.noise.Interpolator;
|
||||||
import com.sudoplay.joise.noise.Noise;
|
import com.sudoplay.joise.noise.Noise;
|
||||||
|
|
||||||
@@ -192,8 +192,8 @@ public class ModuleBasisFunction extends SeedableModule {
|
|||||||
@Override
|
@Override
|
||||||
public void setSeed(long seed) {
|
public void setSeed(long seed) {
|
||||||
super.setSeed(seed);
|
super.setSeed(seed);
|
||||||
|
|
||||||
LCG lcg = new LCG();
|
Xorshift128plus lcg = new Xorshift128plus();
|
||||||
lcg.setSeed(seed);
|
lcg.setSeed(seed);
|
||||||
|
|
||||||
double ax, ay, az;
|
double ax, ay, az;
|
||||||
|
|||||||
@@ -2,56 +2,28 @@ package net.torvald.random
|
|||||||
|
|
||||||
import java.util.Random
|
import java.util.Random
|
||||||
|
|
||||||
//import java.util.concurrent.locks.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class implements a better random number generator than the standard LCG that is implemented in java.util.Random.
|
* Xorshift128+
|
||||||
* It is based on [Numerical Recipes: The Art of Scientific Computing](http://www.amazon.com/gp/product/0521880688?ie=UTF8&tag=javamex-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0521880688),
|
|
||||||
* and gives a good compromise between quality and speed. It is a combined generator: two XORShift generators are combined with an LCG and a multiply with carry generator.
|
|
||||||
* (Without going into all the details here, notice the two blocks of three shifts each, which are the XORShifts; the first line which is the LCG, similar to the standard
|
|
||||||
* Java Random algorithm, and the line between the two XORShifts, which is a multiply with carry generator.)
|
|
||||||
* Note that this version is **not** thread-safe. In order to make it thread-safe, uncomment the lock-related lines. It is also **not** cryptographically secure, like the java.security.SecureRandom class.
|
|
||||||
* @author Numerical Recipes
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class HQRNG @JvmOverloads constructor(seed: Long = System.nanoTime()) : Random() {
|
class HQRNG @JvmOverloads constructor(seed: Long = System.nanoTime()) : Random() {
|
||||||
|
|
||||||
//private Lock l = new ReentrantLock();
|
private var s0: Long
|
||||||
private var u: Long = 0
|
private var s1: Long
|
||||||
private var v = 4101842887655102017L
|
|
||||||
private var w: Long = 1
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
//l.lock();
|
if (seed == 0L)
|
||||||
u = seed xor v
|
throw IllegalArgumentException("Invalid seed: cannot be zero")
|
||||||
nextLong()
|
|
||||||
v = u
|
s0 = (6364136223846793005L * seed + 1442695040888963407L)
|
||||||
nextLong()
|
s1 = (6364136223846793005L * s0 + 1442695040888963407L)
|
||||||
w = v
|
|
||||||
nextLong()
|
|
||||||
//l.unlock();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun nextLong(): Long {
|
override fun nextLong(): Long {
|
||||||
// l.lock();
|
var x = s0
|
||||||
try {
|
val y = s1
|
||||||
u = u * 2862933555777941757L + 7046029254386353087L
|
s0 = y
|
||||||
v = v xor v.ushr(17)
|
x = x xor (x shl 23)
|
||||||
v = v xor v.shl(31)
|
s1 = x xor y xor (x ushr 17) xor (y ushr 26)
|
||||||
v = v xor v.ushr(8)
|
return s1 + y
|
||||||
w = 4294957665L * w.and(0xffffffffL) + w.ushr(32)
|
|
||||||
var x = u xor u.shl(21)
|
|
||||||
x = x xor x.ushr(35)
|
|
||||||
x = x xor x.shl(4)
|
|
||||||
return x + v xor w
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
//l.unlock();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun next(bits: Int): Int {
|
|
||||||
return nextLong().ushr(64 - bits).toInt()
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user