sundries

Assorted little morsels for your enjoyment

git clone https://code.pdelong.com/sundries.git

 1package main
 2
 3import (
 4	"fmt"
 5	"math/big"
 6	"math/rand"
 7)
 8
 9func simulate(one, two float64) bool {
10	var hi float64 = 1.0
11	var lo float64 = 0.0
12	var bound float64 = (hi + lo) / 2
13
14	oneGreater := one >= bound
15	twoGreater := two >= bound
16
17	for oneGreater == twoGreater {
18		if oneGreater {
19			lo = bound
20			bound = (hi + lo) / 2
21		} else {
22			hi = bound
23			bound = (hi + lo) / 2
24		}
25
26		oneGreater = one >= bound
27
28		if oneGreater != twoGreater {
29			break
30		}
31
32		twoGreater = two >= bound
33
34		if oneGreater != twoGreater {
35			break
36		}
37	}
38
39	retval := oneGreater && one > two || twoGreater && two > one
40	//fmt.Println(one, two, oneGreater, twoGreater, retval)
41
42	return retval
43}
44
45func main() {
46	var total int64 = 0
47	var correct int64 = 0
48	for {
49		total++
50		if simulate(rand.Float64(), rand.Float64()) {
51			correct++
52		}
53
54		if total > 0 && total%10000 == 0 {
55			correct := big.NewRat(correct, total)
56			n, _ := correct.Float64()
57			fmt.Println(n)
58		}
59	}
60}