1: /* 2: This is a program to determine the distribution of digits in the 3: fraction part of PI. It will look at the first scale digits. 4: 5: The results are left in the global variable digits. 6: digits[0] is the number of 0's in PI. 7: 8: This program requires the math library. 9: */ 10: 11: define pi () { 12: auto ix, pi, save_scale, work; 13: 14: save_scale = scale; 15: scale += 5; 16: print "\n\nCalculating PI to ",scale," digits. Please wait . . ."; 17: pi = 4*a(1); 18: scale -= 5; 19: work = pi; 20: 21: print "\nCounting digits. . ."; 22: for (ix = 0; ix < 10; ix++) digits[ix] = 0; 23: 24: /* Extract the One's digit from pi. */ 25: scale = 0; 26: one_digit = work / 1; 27: 28: for (ix = save_scale; ix > 0; ix--) { 29: 30: /* Remove the One's digit and multiply by 10. */ 31: scale = ix; 32: work = (work - one_digit) / 1 * 10; 33: 34: /* Extract the One's digit. */ 35: scale = 0; 36: one_digit = work / 1; 37: 38: digits[one_digit] += 1; 39: } 40: 41: /* Restore the scale. */ 42: scale = save_scale; 43: 44: /* Report. */ 45: print "\n\n" 46: print "PI to ", scale, " digits is:\n", pi/1, "\n\n" 47: print "The frequency of the digits are:\n" 48: for (ix = 0; ix < 10; ix++) { 49: print " ", ix, " - ", digits[ix], " times\n" 50: } 51: 52: print "\n\n" 53: } |