As far as I know, and as far as I remember, nothing in this page does anything with Cookies.

## 2017/03/14

### Coding for Pi Day

Today is Pi Day, which is a good day to talk about Pi.

Normally, I'd probably use Pi, sine and cosine to draw things, but instead, I flashed on a couple ways to estimate Pi.

Also, showing you can use Unicode characters in Perl.

```#!/usr/bin/env perl

use feature qw{ say } ;
use strict ;
use warnings ;
use utf8 ;

my \$π = 3.14159 ;

my \$est2  = estimate_2() ;
my \$diff2 = sprintf '%.5f',abs \$π - \$est2 ;
say qq{Estimate 2: \$est2 - off by \$diff2} ;

my \$est1  = estimate_1() ;
my \$diff1 = sprintf '%.5f',abs \$π - \$est1 ;
say qq{Estimate 1: \$est1 - off by \$diff1} ;

exit ;

# concept here is that the area of a circle = π * rsquared
# if r == 1, area = π. If we just take the part of the circle
# where x and y are positive, that'll be π/4. So, take a random
# point between 0,0 and 1,1 see if the distance between it and
# 0,0 is < 1. If so, we increment, and the count / the number
# so far is an estimate of π.

# because randomness, this will change each time you run it

sub estimate_1 {
srand ;
my \$inside = 0.0 ;
my \$pi ;
for my \$i ( 1 .. 1_000_000 ) {
my \$x = rand ;
my \$y = rand ;
\$inside++ if \$x * \$x + \$y * \$y < 1.0 ;
\$pi = sprintf '%.5f', 4 * \$inside / \$i ;
}
return \$pi ;
}

# concept here is that π can be estimated by 4 ( 1 - 1/3 + 1/5 - 1/7 ...)
# so we get closer the further we go
sub estimate_2 {
my \$pi = 0;
my \$c  = 0;
for my \$i ( 0 .. 1_000_000 ) {
my \$j = 2 * \$i + 1 ;
if ( \$i % 2 == 1 ) { \$c -= 1 / \$j ; }
else               { \$c += 1 / \$j ; }
\$pi = sprintf '%.5f', 4 * \$c ;
}
return \$pi ;
}
```