Calculating π the hard way#
In honor of Pi Day, I was going to try to write a script that computed π in shell, but given the lack of floating point support, I decided it would be too messy. If you want to see hard to follow code to generate π, I highly recommend the IOCCC entry westley.c from 1998, the majority of which is an ASCII art circle which calculates its own area and radius in order to estimate π. The hint file suggests looking at the output of
$ cc -E westley.c
The 2012 entry, endoh2 is also a pretty amazing π calculator.
Getting π#
Instead, I will just generate π the shell way: using another program.
$ python -c 'import math; print(math.pi)'
3.14159265359
if a small amount of π is sufficient. For more digits, we can download them:
$ curl 'http://www.geom.uiuc.edu/~huberty/math5337/groupe/digits.html' \
| grep '[0-9]\{70\}' \
| tr -d ' \n' \
> pi
Math with π#
Then we can do math with π:
$ echo $(cat pi) + 1 | bc
$ echo $(cat pi) \* 42. | bc
131.9468914507713160154310220977391211362811147737544444809476728769\
28289064020777942377462664368916855250219633557856879177941473601124\
...
$ echo $(cat pi) / 42. | bc -l
.07479982508547126758
Displaying in large text#
Or display it in large letters:1
$ <pi split -C 10 --filter='cat; echo' \
| while read piLine
do
banner "$piLine"
done
##### # # # ####### ##### ##### ##### #######
# # ## # # ## # # # # # # # #
# # # # # # # # # # # # #
##### # ####### # ##### ###### ##### ###### #####
# ### # # # # # # # # #
# # ### # # # # # # # # # # # #
##### ### ##### # ##### ##### ##### ####### ##### #####
...
(banner
truncates the output at 10 characters per line,
so this uses split
to split the input into 10 character
lines.)
Or display it in huge letters:
$ <pi printerbanner
###
##### #
####### ##
######### #####
######## ######
####### ########
####### ########
###### #######
###### ######
##### ######
##### #####
##### ####
#### ####
#### ####
#### ####
#### ####
#### ## ####
##### #### ####
##### ###### #####
###### ######## ######
####### ########### ######
######## ############### ########
######### ################### #########
########### ########################## ############
############# ############## ####################################
################ ################# ##################################
############################################ ################################
########################################## ##############################
######################################## ###########################
###################################### #######################
################################## #################
############################## ###########
##########################
####################
###########
######
##########
############
##############
##############
##############
############
##########
######
...
Comments
Have something to add? Post a comment by sending an email to comments@aweirdimagination.net. You may use Markdown for formatting.
There are no comments yet.