Percolation/Mean run density: Difference between revisions

Added Kotlin
(Added Julia language)
(Added Kotlin)
Line 655:
nrep = 500 p = 0.90 n = 16384
p · (1 - p) = 0.090 sim = 0.090 Δ = 0.1%</pre>
 
=={{header|Kotlin}}==
{{trans|C}}
<lang scala>// version 1.2.10
 
import java.util.Random
 
val rand = Random()
const val RAND_MAX = 32767
 
// just generate 0s and 1s without storing them
fun runTest(p: Double, len: Int, runs: Int): Double {
var cnt = 0
val thresh = (p * RAND_MAX).toInt()
for (r in 0 until runs) {
var x = 0
var i = len
while (i-- > 0) {
val y = if (rand.nextInt(RAND_MAX + 1) < thresh) 1 else 0
if (x < y) cnt++
x = y
}
}
return cnt.toDouble() / runs / len
}
 
fun main(args: Array<String>) {
println("running 1000 tests each:")
println(" p\t n\tK\tp(1-p)\t diff")
println("------------------------------------------------")
val fmt = "%.1f\t%6d\t%.4f\t%.4f\t%+.4f (%+.2f%%)"
for (ip in 1..9 step 2) {
val p = ip / 10.0
val p1p = p * (1.0 - p)
var n = 100
while (n <= 100_000) {
val k = runTest(p, n, 1000)
println(fmt.format(p, n, k, p1p, k - p1p, (k - p1p) / p1p * 100))
n *= 10
}
println()
}
}</lang>
 
Sample output:
<pre>
running 1000 tests each:
p n K p(1-p) diff
------------------------------------------------
0.1 100 0.0908 0.0900 +0.0008 (+0.93%)
0.1 1000 0.0900 0.0900 +0.0000 (+0.02%)
0.1 10000 0.0899 0.0900 -0.0001 (-0.08%)
0.1 100000 0.0900 0.0900 -0.0000 (-0.05%)
 
0.3 100 0.2112 0.2100 +0.0012 (+0.56%)
0.3 1000 0.2096 0.2100 -0.0004 (-0.21%)
0.3 10000 0.2101 0.2100 +0.0001 (+0.05%)
0.3 100000 0.2101 0.2100 +0.0001 (+0.03%)
 
0.5 100 0.2522 0.2500 +0.0022 (+0.90%)
0.5 1000 0.2504 0.2500 +0.0004 (+0.15%)
0.5 10000 0.2500 0.2500 -0.0000 (-0.00%)
0.5 100000 0.2500 0.2500 +0.0000 (+0.00%)
 
0.7 100 0.2162 0.2100 +0.0062 (+2.95%)
0.7 1000 0.2106 0.2100 +0.0006 (+0.29%)
0.7 10000 0.2101 0.2100 +0.0001 (+0.03%)
0.7 100000 0.2100 0.2100 +0.0000 (+0.01%)
 
0.9 100 0.0982 0.0900 +0.0083 (+9.17%)
0.9 1000 0.0911 0.0900 +0.0011 (+1.17%)
0.9 10000 0.0902 0.0900 +0.0002 (+0.18%)
0.9 100000 0.0900 0.0900 -0.0000 (-0.02%)
</pre>
 
=={{header|Mathematica}}==
9,476

edits