Compare commits

..

No commits in common. "022ff76715fcf88bd7225dff96b05e8503830830" and "237468f28aa2fa1f26252d4e9e5cce9f74fc952a" have entirely different histories.

2 changed files with 11 additions and 25 deletions

View File

@ -6,26 +6,14 @@ This was a test to determine if random numbers follow [Benford's Law](https://en
With One-Hundred-Million samples of random numbers between 0 and 9,999,999,999,999,999, the number of leading digits was the following:
```shell
$ ./benfords-law.exe
2020/11/14 10:24:18 generating numbers...
2020/11/14 10:24:19 18% completed generating and analyzing samples
2020/11/14 10:24:20 37% completed generating and analyzing samples
2020/11/14 10:24:21 56% completed generating and analyzing samples
2020/11/14 10:24:22 75% completed generating and analyzing samples
2020/11/14 10:24:23 93% completed generating and analyzing samples
2020/11/14 10:24:24 done.
1: 1108503 (11.085030%)
2: 1111584 (11.115840%)
3: 1111726 (11.117260%)
4: 1111122 (11.111220%)
5: 1110443 (11.104430%)
6: 1111248 (11.112480%)
7: 1111496 (11.114960%)
8: 1111777 (11.117770%)
9: 1112101 (11.121010%)
Press 'Enter' to continue...
```
1. 11105630
2. 11110535
3. 11112084
4. 11113667
5. 11120216
6. 11106549
7. 11108623
8. 11114813
9. 11107883
This shows that Benford's law only works when the data is not random, such as natural data gathered in real life. This is because natural data is generated following a power law, which is common in nature.

View File

@ -27,7 +27,7 @@ func main() {
for {
<-statusTicker.C
percentCompleted := (currentSample * 100) / numSamples
log.Printf("%d%% completed generating and analyzing samples", percentCompleted)
log.Printf("%d %% completed generating and analyzing samples", percentCompleted)
}
}()
@ -48,7 +48,7 @@ func main() {
// output results
for digitMinusOne, count := range results {
fmt.Printf("%d: %d (%f%%)\n", digitMinusOne+1, count, float64(count*100)/float64(numSamples))
fmt.Printf("%d: %d\n", digitMinusOne+1, count)
}
fmt.Print("Press 'Enter' to continue...")
@ -61,12 +61,10 @@ func generatorWorker(returnChannel chan int) {
}
}
// firstDigit returns the first/leftmost digit of the base10 representation of an integer
func firstDigit(x int) int {
return int(math.Abs(float64(x)) / math.Pow(10, float64(numDigits(x)-1)))
}
// numDigits returns the number of digits
func numDigits(x int) int {
if x == 0 {
return 1