    45:	  cout  "Power Demonstration\n\n"; 
    46:	  cout  "This program displays the result of raising\n"; 
    47:	  cout  "a value (base) to a power (exponent). To\n"; 
    48:	  cout  "force an exception, enter a negative base\n"; 
    49:	  cout  "and a fractional exponent (e.g. -4 and 1. 5)\n"; 
    50:	  cout  "Or, enter a zero base and an exponent less than\n"; 
    51:	  cout  "zero.\n\n"; 
    52:	} 
    53: 
    54:	//   (   main ()) 
    55:	void Run() 
    56:	{ 
    57:	  try { 
    58:	     double base, exponent, result; 
    59:	     cout  "base? "; 
    60:	     cin  base; 
    61:	     cout  "exponent? "; 
    62:	     cin  exponent; 
    63:	     result = Power(base, exponent); 
    64:	     cout  "result == "  result 	endl; 
    65:	  } 
    66:	  catch (Error& e) { 
    67:	    e.ReportO; //     
    68:	    throw e; //       
    69:	  } 
   70:	} 
   71: 
   72:	//   Power 
   73:	double Pow(double b, double e) 
   74:	{ 
   75:	  return exp(e * log(b)); 
   76:	} 
   77: 
   78:	//  b    
   79:	double Power(double b, double e) throw(Error) 
   80:	{ 
   81:	if (b > 0.0) return Pow(b, e); 
   82:	if (b < 0.0) { 
   83:	   double ipart; 
   84:	   double fpart = nodf(e, Sipart); 
   85:	   if (fpart == 0) { 
   86:	      if (fmod( ipart, 2) != 0) // .o. ipart -  
   87:	         return -Pow(-b, e); 
   88:	      else 
   89:	        return Pow(-b, e); 
   90:	    } else 
   91:	       throw Error(b, e); 
   92:	 } else { 
   93:	   if (e == 0.0) return 1.0; 
   94:	   if (e < 1.0) throw Error(b, e); 
   95:	   return 0.0; 
   96:	  } 
   97: 	} 
   98:
   99:	//  - Report ()	 Error() 
   100:	//  ,    
   101:	void 
   102:	Error::Report() 
   103:	{ 
   104:	  cout  "Domain error: " 
   105:	   " base:"  b 
   106:	   " exponent: "  e 
   107:	   endl;	. 
   108:	} 

             
. -,         8. 
     ,       
  . ,  Power()   throw  
  ,        
 Error (    ). 
           Error . 
   ,     . 


     15.   C++     409 
