    42:	void Instruct() 
    43:	{ 
    44:	  cout  "Power Demonstration\n\n";             
    45:	  cout  "This program displays the result of raising\n"; 
    46:	  cout  "a value (base) to a power (exponent). To\n"; 
    47:	  cout  "force an exception, enter a negative base\n"; 
    48:	  cout  "and a fractional exponent (e.g. -4 and 1.5)\n"; 
    49:	  cout  "Or, enter a zero base and an exponent less tnan\n"; 
    50:	  cout  "zero.\n\n"; 
    51:	} 
    52: 
    53:	//     
    54:	double Pow(double b, double e) 
    55:	{ 
    56:	  return exp(e * log(b) ); 
    57:	}
    58: 
    59:	//  b     
    60:	double Power(double b, double e) 
    61:	{ 
    62:	if (b > 0.0) return Pow(b, e); 
    63:	if (b < 0.0) { 
    64:	   double ipart; 
    65:	  double fpart = modf(e, Sipart); 
    66:	   if (fpart == 0) { 
    67:	      if (fmod(ipart, 2) != 0) //  , ipart -   
    68:	          return -Pow(-b, e); 
    69:	      else 
    70:	         return Pow(-b, e); 
    71:	   } else 
    72:	      throw Error(b, e); 
    73:	} else { 
    74:	   if (e == 0.0) return 1.0; 
    75:	   if (e < 1.0) throw Error(b, e); 
    76:	   return 0.0; 
    77:	} 
    78:	throw ErrprQ; //      
    79:     } 
    80: 
    81:	//  ,    
    82:	void 
    83:	Error::Report() 
    84:	{ 
    85:	  cout  "Domain error:" 
    86:	     " base:"  b 
    87:	     " exponent:"  e 
    88:	     endl; 
    89:	} 

     EXCEPT   Power(),    
     . ,   
      . 

            . 
           . 

            
.         
(),    ( )   
   (  ). 
         ,  Power 
  ,    Error. 
,          
Power   ,    Error, 
  b  : 

    throw Error(b,  e); 

       main().  Power    try,  
   : 
    try {       
        double ba.se, exponent, result    
         // ...      
        result = Power(base, exponent); 
        cout  "result == "  result  endl; 
    } 


    406      III.   ANSI C++ 
