double RationalNumber::Log10(const RationalNumber &r) {
   if ((r._num <= 0) || (r._den <= 0)) {
      _error_msg("numerator and denominator can't be negative values or zero.");
      assert(r._num > 0 && r._den > 0);
   }
   return (log10(r._num) - log10(r._den));
}
RationalNumber RationalNumber::convert_to_fraction(char *strNum) {
   if (!isNumber(strNum)) {
      _error_msg("input string is not understandable fraction value.");
      assert(isNumber(strNum));
   }
   int counter = 0; 
   // int len = 0; 
   int pos = -1;
   int i = 0;
   int isdecimal = false;
   char *str = strNum;
   char *temp = new char[20];
   while (*str) {
      if (*str == '.') { 
         isdecimal = true; 
         pos = counter; 
      } else {
         *(temp + i++) = *str;
      }
      str++; 
      counter++;
   }
   temp[i] = 0;
   if (isdecimal) {
      this->_num = atol(temp);
      this->_den = (int)pow(10, counter - pos - 1 );
   } else {
      this->_num = atol(temp);
      this->_den = 1;
   }
   delete[] temp;
   return *this;
}
RationalNumber::RationalNumber(int _a, int _b) {
   _num = _a;
   _den = _b;
   if (_den == 0) {
      _error_msg("denominator can't be zero.");
      assert(_den != 0);
   }
   simplify(*this);
}
Exemple #4
0
/*--------------------------------------------------------------------------*/
static INT ComDrv_PowerDown(void)
{
	INT nTimeOutCount;
	const UINT8 abyStopMode[2] = { 0x03, 0x17 };
	ComDrv_DisableInterrupt();
	
	ComDrv_VolumeDown();

	/* Set AP1 to 1 */
	ComDrv_SendSimpleCommand(CMD_COM_ID_ANALOG_CTRL,ANALOG_CTRL_REG_AP1);

	/* Set AP0 to 1 */
	ComDrv_SendSimpleCommand(CMD_COM_ID_ANALOG_CTRL,ANALOG_CTRL_REG_AP0 | ANALOG_CTRL_REG_AP1);


	/* Let uC enter STOP mode */
#ifdef SOFT_MODE
	ComDrv_SendFIFOData(CMD_COM_ID_GEN_FIFO, abyStopMode, 2);
#else
	outpw(REG_ACTL_M80SIZE, 2+1);
	outpw(REG_ACTL_M80DATA0, 0x55 | abyStopMode[0]<<8 | (abyStopMode[1]<<16));
	outpw(REG_ACTL_M80ADDR, CMD_COM_ID_GEN_FIFO);
	//outpw(REG_ACTL_M80CON, 0x25210);
	outpw(REG_ACTL_M80CON, inpw(REG_ACTL_M80CON) | W_GFIFO | W_IF12_ACT);
	while((inpw(REG_ACTL_M80CON)&W_IF12_ACT) != 0);
	//outpw(REG_ACTL_M80CON, 0x5200);
	outpw(REG_ACTL_M80CON, inpw(REG_ACTL_M80CON) & ~W_GFIFO );
	
	ComDrv_SendSimpleCommand(CMD_COM_ID_WAKE_UP,WAKE_UP_REG_INT);
#endif		

	for (nTimeOutCount=0;nTimeOutCount<10000;nTimeOutCount++){
		if ((ComDrv_ReceiveSimpleData(CMD_COM_ID_WAKE_UP) & WAKE_UP_REG_DP0) != 0)
			break;
	}
	if (nTimeOutCount==10000){
		_error_msg("ComDrv_PowerDown - wait for W5691 uC enther STOP mode timeout\n");
		return ERR_W5691_STOP_TIMEOUT;
	}
		

	/* Set DP1 to 1, Set AP2 to 1 */
	ComDrv_SendSimpleCommand(CMD_COM_ID_CLK_CTRL,CLK_CTRL_REG_DP1 | CLK_CTRL_REG_AP2);

	ComDrv_EnableInterrupt();

	return MW_NO_ERROR;
}
Exemple #5
0
static INT write_intermediate_reg(INT nRegId, UINT8 data)
{
	INT nTimeOutCount;
	outpw(REG_ACTL_M80ADDR, nRegId);
	outpw(REG_ACTL_M80SIZE, 0x1);
	outpw(REG_ACTL_M80DATA0, data);
	outpw(REG_ACTL_M80CON, inpw(REG_ACTL_M80CON) | W_IF12_ACT);
	for(nTimeOutCount=0;nTimeOutCount<10000;nTimeOutCount++){
		if ((inpw(REG_ACTL_M80CON) & W_IF12_ACT) == 0 )
			break;
	}
	
	if (nTimeOutCount == 10000){
			_error_msg("write_intermediate_reg - M80 write intermediate register timeout\n");
			return ERR_M80_W_INTERMEDIATEREG_TIMEOUT;
	}
	return 0;
}
Exemple #6
0
static INT read_intermediate_reg(INT nRegId)
{
	INT nTimeOutCount;
	outpw(REG_ACTL_M80ADDR, nRegId);
	outpw(REG_ACTL_M80CON, inpw(REG_ACTL_M80CON) | R_IF11_ACT);

	
	for(nTimeOutCount=0;nTimeOutCount<10000;nTimeOutCount++){
		if ((inpw(REG_ACTL_M80CON) & R_IF11_ACT) == 0 )
			break;
	}
	
	if (nTimeOutCount == 10000){
			_error_msg("read_intermediate_reg - M80 read intermediate register timeout\n");
			return ERR_M80_R_INTERMEDIATEREG_TIMEOUT;
	}

	return ((inpw(REG_ACTL_M80SIZE)>>16) & 0xff);
}