Verify distribution uniformity/Naive: Difference between revisions
Content added Content deleted
(Verify distribution uniformity/Naive en FreeBASIC) |
|||
Line 694: | Line 694: | ||
end subroutine</lang> |
end subroutine</lang> |
||
=={{header|FreeBASIC}}== |
|||
{{trans|Liberty BASIC}} |
|||
<lang freebasic> |
|||
Randomize Timer |
|||
Function dice5() As Integer |
|||
Return Int(Rnd * 5) + 1 |
|||
End Function |
|||
Function dice7() As Integer |
|||
Dim As Integer temp |
|||
Do |
|||
temp = dice5() * 5 + dice5() -6 |
|||
Loop Until temp < 21 |
|||
Return (temp Mod 7) +1 |
|||
End Function |
|||
Function distCheck(n As Ulongint, delta As Double) As Ulongint |
|||
Dim As Ulongint a(n) |
|||
Dim As Ulongint maxBucket = 0 |
|||
Dim As Ulongint minBucket = 1000000 |
|||
For i As Ulongint = 1 To n |
|||
a(i) = dice5() |
|||
If a(i) > maxBucket Then maxBucket = a(i) |
|||
If a(i) < minBucket Then minBucket = a(i) |
|||
Next i |
|||
Dim As Ulongint nBuckets = maxBucket + 1 |
|||
Dim As Ulongint buckets(maxBucket) |
|||
For i As Ulongint = 1 To n |
|||
buckets(a(i)) += 1 |
|||
Next i |
|||
'check buckets |
|||
Dim As Ulongint expected = n / (maxBucket-minBucket+1) |
|||
Dim As Ulongint minVal = Int(expected*(1-delta)) |
|||
Dim As Ulongint maxVal = Int(expected*(1+delta)) |
|||
expected = Int(expected) |
|||
Print "minVal", "Expected", "maxVal" |
|||
Print minVal, expected, maxVal |
|||
Print "Bucket", "Counter", "pass/fail" |
|||
distCheck = true |
|||
For i As Ulongint = minBucket To maxBucket |
|||
Print i, buckets(i), Iif((minVal > buckets(i)) Or (buckets(i) > maxVal),"fail","") |
|||
If (minVal > buckets(i)) Or (buckets(i) > maxVal) Then Return false |
|||
Next i |
|||
End Function |
|||
Dim Shared As Ulongint n = 1000 |
|||
Print "Testing ";n;" times" |
|||
If Not(distCheck(n, 0.05)) Then Print "Test failed" Else Print "Test passed" |
|||
Print |
|||
n = 10000 |
|||
Print "Testing ";n;" times" |
|||
If Not(distCheck(n, 0.05)) Then Print "Test failed" Else Print "Test passed" |
|||
Print |
|||
n = 50000 |
|||
Print "Testing ";n;" times" |
|||
If Not(distCheck(n, 0.05)) Then Print "Test failed" Else Print "Test passed" |
|||
Print |
|||
Sleep |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
Igual que la entrada de Liberty BASIC. |
|||
</pre> |
|||
=={{header|Go}}== |
=={{header|Go}}== |