Codes for P3

Note: a slight change was made to this program so it looks a little different from what is on the handout. (See the last few lines.) Basically, the program computes b(100,30) instead of b(550,30) as stated on the handout.


// P3A: Tests the methods in MyMath	

import java.io.*;
public class P3A
{
	public static void main(String args[])
	{
	TokenReader in = new TokenReader(System.in);
	
	// The square root of 1,000,000.
	
	double y = MyMath.sqrt(1000000.0);
	Format.println(System.out,"The square root of one million = %20.15f", y);
	
	// The absolute value of -10.
	
	//double ten = MyMath.abs(-10.0);
	//System.out.println("\nThe absolute value of -10 is " + ten);
	
	// The absolute value of 10.
	
	//ten = MyMath.abs(10.0);
	//System.out.println("\nThe absolute value of 10 is " + ten);
	
	
    // Number of poker hands
    
    //long nPokerHands = MyMath.binCoeff(52,5);
    //System.out.println("\nThe number of possible 5-card poker hands = " + nPokerHands);
    //nPokerHands = MyMath.binCoeff(52,47);
    //System.out.println("\nThe binomial coefficient 52-choose-47     = " + nPokerHands);
   
    // Two-to-the-50.
	
	//long twoE50 = (long) MyMath.pow(2,50);
	//System.out.println("\nThe 50th power of two = " + twoE50);

    // Stirling approximation to 5!
    
    //double z = MyMath.stirling(5);
    //System.out.println("\nThe Stirling approximation to 5! = " + z);
    
    // Number of poker hands via Stirling
    
    //long nPokerHandsApprx = (long) MyMath.binCoeffApprx(52,5);
    //System.out.println("\nThe approximate number of 5-card poker hands = " + nPokerHandsApprx);
    
    
    // The number of possible 30-student sections in a class of 100 students.
    
    //double nSections = MyMath.binCoeffApprx(100,30);
    //System.out.println("\nAn approximation to 100-choose-30 = " + nSections);    
          
       
    in.waitUntilEnter();
	}

}


// This class contains methods that can be used to answer various
// combinatoric questions that involve binomial coefficients.
public class MyMath
{
   public static final int KMAX = 12; // #Newton square root iterations.

   // Yields the square root of x. 
   // The value of  x must be  nonnegative.
   public static double sqrt(double x)
   {
      double y = x; // The current approximation to the square root.
      int k;
      
      // Perform KMAX steps of Newton's method.
      for(k=1;k<=KMAX;k++)
      {
         y = (y+x/y)/2.0;
      }
      
      return y;
   }
   
}