float 
my_sqrt(float val)
{
	float           x = val / 10;

	float           dx;

	double          diff;
	double          min_tol = 0.00001;

	int             i, flag;

	flag = 0;
	if (val == 0)
		x = 0;
	else {
		for (i = 1; i < 20; i++) {
			if (!flag) {
				dx = (val - (x * x)) / (2.0 * x);
				x = x + dx;
				diff = val - (x * x);
				if (my_fabs(diff) <= min_tol)
					flag = 1;
			} else
				x = x;
		}
	}
	return (x);
}
Beispiel #2
0
float my_sqrtf(float val)
{
  float x = val/10;

  float dx;

  float diff;
  float min_tol = 0.00001f;

  int i, flag;

  flag = 0;
  if (val == 0 ) x = 0;
  else {
    _Pragma("loopbound min 19 max 19");
    for (i=1;i<20;i++)
      {
	if (!flag) {
	  dx = (val - (x*x)) / (2.0f * x);
	  x = x + dx;
	  diff = val - (x*x);
          
	  if (my_fabs(diff) <= min_tol) flag = 1;
	}
	else 
	  x =x;
        
      }
  }
  return (x);
}
Beispiel #3
0
/**
 * Spocita tangens nekolika zpusoby a vypocita absolutni chyby
 * @param val Hodnoty pro vypocet
 */
void calculateTan(TValue val)
{
    double tan_lib = tan(val.A);
    double tan_taylor;
    double tan_cfrac;
    double te;
    double ce;

    for (unsigned int i = val.N; i <= val.M; i++)
    {
        tan_taylor = taylor_tan(val.A, i);
        tan_cfrac = cfrac_tan(val.A, i);

        te = my_fabs(tan_taylor - tan_lib);
        ce = my_fabs(tan_cfrac - tan_lib);

        printf("%d %e %e %e %e %e\n", i, tan_lib, tan_taylor, te, tan_cfrac, ce);
    }
}
Beispiel #4
0
int main(void)
{
	double b = 0.0;

	while (scanf("%lf", &b) != EOF) {
		printf("%.2lf\n", my_fabs(b));
	}

	system("pause");
	return	0;
}
Beispiel #5
0
/**
 * Spocita tangens pomoci cfrac_tan() se zadanou presnosti
 * @param a Uhel pro vypocet
 * @param eps Presnost vypoctu
 * @return Tangens zadaneho uhlu
 */
double getAcurateTan(double a, double eps)
{
    double prevTan = 0.0;
    double actTan = cfrac_tan(a, eps);

    for (unsigned int i = 2; my_fabs(actTan - prevTan) > eps; i++)
    {
        prevTan = actTan;
        actTan = cfrac_tan(a, i);
    }

    return actTan;
}
/* relative error < 2e-11 on [-1, 1] */
float my_acos (float x)
{
  float xa, t;
  xa = my_fabs (x);
  /* arcsin(x) = pi/2 - 2 * arcsin (sqrt ((1-x) / 2)) 
   * arccos(x) = pi/2 - arcsin(x)
   * arccos(x) = 2 * arcsin (sqrt ((1-x) / 2))
   */
  if (xa > 0.5625) {
    t = 2.0 * asin_core (my_sqrt (0.5 * (1.0 - xa)));
  } else {
    t = 1.5707963267948966 - asin_core (xa);
  }
  /* arccos (-x) = pi - arccos(x) */
  return (x < 0.0) ? (3.1415926535897932 - t) : t;
}
Beispiel #7
0
	void BasicwaveInstance::getAudio(float *aBuffer, unsigned int aSamples)
	{
		unsigned int i;
		switch (mParent->mWaveform)
		{
			case Basicwave::SINE:
				for (i = 0; i < aSamples; i++)
				{
					aBuffer[i] = (float)sin(mParent->mFreq * mOffset * M_PI * 2);
					mOffset++;
				}
				break;
			case Basicwave::SAW:
				for (i = 0; i < aSamples; i++)
				{
					aBuffer[i] = (1 - fmod(mParent->mFreq * mOffset, 1)) * 2 - 1;
					mOffset++;
				}
				break;				
			case Basicwave::INVERSESAW:
				for (i = 0; i < aSamples; i++)
				{
					aBuffer[i] = (fmod(mParent->mFreq * mOffset, 1)) * 2 - 1;
					mOffset++;
				}
				break;				
			case Basicwave::SQUARE:
				for (i = 0; i < aSamples; i++)
				{
					aBuffer[i] = (fmod(mParent->mFreq * mOffset, 1.0f) > 0.5f) ? -1.0f : 1.0f;
					mOffset++;
				}
				break;
			case Basicwave::TRIANGLE:
				for (i = 0; i < aSamples; i++)
				{
					aBuffer[i] = my_fabs(0.5f - fmod(mParent->mFreq * mOffset, 1)) * 4 - 1;
					mOffset++;
				}
				break;
		}
	}
/* not quite rint(), i.e. results not properly rounded to nearest-or-even */
float my_rint (float x)
{
  float t = my_floor (my_fabs(x) + 0.5);
  return (x < 0.0) ? -t : t;
}