Seven-sided dice from five-sided dice: Difference between revisions
Content added Content deleted
m (→{{header|REXX}}: used idiomatic code for output spacing, added/changed comments and whitespace.) |
|||
Line 1,780: | Line 1,780: | ||
1 143121 2 142383 3 143353 4 142811 5 142172 6 143291 7 142869 |
1 143121 2 142383 3 143353 4 142811 5 142172 6 143291 7 142869 |
||
=={{header|VBA}}== |
|||
The original StackOverflow page doesn't exist any longer. Luckily [https://web.archive.org/web/20100730055051/http://stackoverflow.com:80/questions/137783/given-a-function-which-produces-a-random-integer-in-the-range-1-to-5-write-a-fun archive.org] exists. |
|||
<lang vb>Private Function Test4DiscreteUniformDistribution(ObservationFrequencies() As Variant, Significance As Single) As Boolean |
|||
'Returns true if the observed frequencies pass the Pearson Chi-squared test at the required significance level. |
|||
Dim Total As Long, Ei As Long, i As Integer |
|||
Dim ChiSquared As Double, DegreesOfFreedom As Integer, p_value As Double |
|||
Debug.Print "[1] ""Data set:"" "; |
|||
For i = LBound(ObservationFrequencies) To UBound(ObservationFrequencies) |
|||
Total = Total + ObservationFrequencies(i) |
|||
Debug.Print ObservationFrequencies(i); " "; |
|||
Next i |
|||
DegreesOfFreedom = UBound(ObservationFrequencies) - LBound(ObservationFrequencies) |
|||
'This is exactly the number of different categories minus 1 |
|||
Ei = Total / (DegreesOfFreedom + 1) |
|||
For i = LBound(ObservationFrequencies) To UBound(ObservationFrequencies) |
|||
ChiSquared = ChiSquared + (ObservationFrequencies(i) - Ei) ^ 2 / Ei |
|||
Next i |
|||
p_value = 1 - WorksheetFunction.ChiSq_Dist(ChiSquared, DegreesOfFreedom, True) |
|||
Debug.Print |
|||
Debug.Print "Chi-squared test for given frequencies" |
|||
Debug.Print "X-squared ="; Format(ChiSquared, "0.0000"); ", "; |
|||
Debug.Print "df ="; DegreesOfFreedom; ", "; |
|||
Debug.Print "p-value = "; Format(p_value, "0.0000") |
|||
Test4DiscreteUniformDistribution = p_value > Significance |
|||
End Function |
|||
Private Function Dice5() As Integer |
|||
Dice5 = Int(5 * Rnd + 1) |
|||
End Function |
|||
Private Function Dice7() As Integer |
|||
Dim i As Integer |
|||
Do |
|||
i = 5 * (Dice5 - 1) + Dice5 |
|||
Loop While i > 21 |
|||
Dice7 = i Mod 7 + 1 |
|||
End Function |
|||
Sub TestDice7() |
|||
Dim i As Long, roll As Integer |
|||
Dim Bins(1 To 7) As Variant |
|||
For i = 1 To 1000000 |
|||
roll = Dice7 |
|||
Bins(roll) = Bins(roll) + 1 |
|||
Next i |
|||
Debug.Print "[1] ""Uniform? "; Test4DiscreteUniformDistribution(Bins, 0.05); """" |
|||
End Sub</lang> |
|||
{{out}}<pre>[1] "Data set:" 142418 142898 142940 142573 143030 143139 143002 |
|||
Chi-squared test for given frequencies |
|||
X-squared =2.8870, df = 6 , p-value = 0.8229 |
|||
[1] "Uniform? True" |
|||
</pre> |
|||
=={{header|VBScript}}== |
=={{header|VBScript}}== |
||
<lang vb>Option Explicit |
<lang vb>Option Explicit |