Verify distribution uniformity/Naive: Difference between revisions

Added Wren
m (→‎{{header|Phix}}: Fix comment: Perl 6 --> Raku)
(Added Wren)
Line 1,880:
Maximum found variation is 0.94%, desired limit is 3.00%.
Smooth!
 
=={{header|Wren}}==
{{trans|Kotlin}}
{{libheader|Wren-fmt}}
{{libheader|Wren-sort}}
<lang ecmascript>import "random" for Random
import "/fmt" for Fmt
import "/sort" for Sort
 
var r = Random.new()
 
var dice5 = Fn.new { 1 + r.int(5) }
 
var checkDist = Fn.new { |gen, nRepeats, tolerance|
var occurs = {}
for (i in 1..nRepeats) {
var d = gen.call()
occurs[d] = occurs.containsKey(d) ? occurs[d] + 1 : 1
}
var expected = (nRepeats/occurs.count).floor
var maxError = (expected*tolerance/100).floor
System.print("Repetitions = %(nRepeats), Expected = %(expected)")
System.print("Tolerance = %(tolerance)\%, Max Error = %(maxError)\n")
System.print("Integer Occurrences Error Acceptable")
var f = " $d $5d $5d $s"
var allAcceptable = true
occurs = occurs.toList
Sort.quick(occurs)
for (me in occurs) {
var error = (me.value - expected).abs
var acceptable = (error <= maxError) ? "Yes" : "No"
if (acceptable == "No") allAcceptable = false
Fmt.print(f, me.key, me.value, error, acceptable)
}
System.print("\nAcceptable overall: %(allAcceptable ? "Yes" : "No")")
}
 
checkDist.call(dice5, 1e6, 0.5)
System.print()
checkDist.call(dice5, 1e5, 0.5)</lang>
 
{{out}}
Sample run:
<pre>
Repetitions = 1000000, Expected = 200000
Tolerance = 0.5%, Max Error = 1000
 
Integer Occurrences Error Acceptable
1 199599 401 Yes
2 199676 324 Yes
3 200561 561 Yes
4 200647 647 Yes
5 199517 483 Yes
 
Acceptable overall: Yes
 
Repetitions = 100000, Expected = 20000
Tolerance = 0.5%, Max Error = 100
 
Integer Occurrences Error Acceptable
1 19780 220 No
2 20005 5 Yes
3 20206 206 No
4 19920 80 Yes
5 20089 89 Yes
 
Acceptable overall: No
</pre>
 
=={{header|zkl}}==
9,483

edits