From 7ce4439bd26e7c662c6593013fa5fa8734071384 Mon Sep 17 00:00:00 2001 From: Steven Polley Date: Sat, 14 Nov 2020 10:25:49 -0700 Subject: [PATCH] add percentage to results output --- README.md | 29 ++++++++++++++++++++--------- main.go | 6 ++++-- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 64723ff..c867345 100644 --- a/README.md +++ b/README.md @@ -6,14 +6,25 @@ 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: -1: 11105630 -2: 11110535 -3: 11112084 -4: 11113667 -5: 11120216 -6: 11106549 -7: 11108623 -8: 11114813 -9: 11107883 +```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... +``` 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. diff --git a/main.go b/main.go index 7bd32e6..1652a7b 100644 --- a/main.go +++ b/main.go @@ -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\n", digitMinusOne+1, count) + fmt.Printf("%d: %d (%f%%)\n", digitMinusOne+1, count, float64(count*100)/float64(numSamples)) } fmt.Print("Press 'Enter' to continue...") @@ -61,10 +61,12 @@ 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