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); }
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); }
/** * 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); } }
int main(void) { double b = 0.0; while (scanf("%lf", &b) != EOF) { printf("%.2lf\n", my_fabs(b)); } system("pause"); return 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; }
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; }