# NYCJUG/Projects/Pascal

Interesting relation between Pascal's triangle and Sierpinksi triangles also demonstrating an effect of limited numeric precision and how to adjust for it.

### A Graphic Representation of Pascal's Triangle

 Celebrity Death-Match: Pascal vs. Sierpinksi Session Image Pascal =: i. !/ i.    Pascal 5 1 1 1 1 1 0 1 2 3 4 0 0 1 3 6 0 0 0 1 4 0 0 0 0 1    load 'viewmat'    \$pt50=. Pascal 50 50 50    viewmat 5|pt50    load 'logo'    saveBMPFl 'C:\amisc\j\nycjug\Pascal50mod5.bmp' viewmat 11|pt50    saveBMPFl 'C:\amisc\j\nycjug\Pascal50mod11.bmp' viewmat 3|pt50    saveBMPFl 'C:\amisc\j\nycjug\Pascal50mod3.bmp'    NB. Why does it look "broken" on the right?    >./,pt50 6.3205303e13    /:~,pt50 0 0 0 0 0 0...    \:~,pt50 6.3205303e13 6.3205303e13 5.8343357e13...    3|10{.\:~,pt50 0 0 0 0 0 0 0 0 0 0 NB. Aha! Looks suspicious...    NB. We ran out of precision on the large values... \$pt50=. Pascal 50x NB. Use extended precision argument 50 50    \:~,pt50 NB. Now large numbers to full precision 63205303218876 63205303218876...    3|10{.\:~,pt50 NB. So no spurious zeros on right edge 0 0 0 0 1 1 1 1 0 0    viewmat 3|pt50

### Another Way to Show Pascal's Triangle

First, define a verb to show a row of the triangle without trailing zeros:

```   showRownz=: 13 : 'smoutput y{.~y i. 0'
```

Then, define a simple version of Pascal to be applied recursively:

```   pascal1=: 13 : '({.y),(2+/\y),{:y'
```

Now, combine them:

```   showRownz"1 pascal1^:(i.10)],1
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
```