Nessa questão o seu programa vai ter que rodar o código para redefinir o valor de a, b, e m várias vezes. Por exemplo, se queremos calcular ln 5 com precisão 0.1, as redefinições são:
iter 0.000000, a = 0.000000, b = 5.000000, m = 2.500000, exp(m) = 12.182494l iter 1.000000, a = 0.000000, b = 2.500000, m = 1.250000, exp(m) = 3.490343l iter 2.000000, a = 1.250000, b = 2.500000, m = 1.875000, exp(m) = 6.520819l iter 3.000000, a = 1.250000, b = 1.875000, m = 1.562500, exp(m) = 4.770733l iter 4.000000, a = 1.562500, b = 1.875000, m = 1.718750, exp(m) = 5.577552l iter 5.000000, a = 1.562500, b = 1.718750, m = 1.640625, exp(m) = 5.158393l iter 6.000000, a = 1.562500, b = 1.640625, m = 1.601562, exp(m) = 4.960778l
double meu_ln(double x, double prec) { double a = 0, b = x, m = (a+b)/2, i =0; while (b - a > prec) { printf("iter %lf, a = %lf, b = %lf, m = %lf, exp(m) = %fl\n", i, a, b, m, exp(m)); ++i; if (exp(m) > x) b = m; else a = m; m = (a+b)/2; } printf("iter %lf, a = %lf, b = %lf, m = %lf, exp(m) = %fl\n", i, a, b, m, exp(m)); return m; }
int main(int argc, char *argv[]) { double x = 0, x2 = 0, n = 0, v = 0; while (1) { scanf("%lf", &v); if (v == -1) break; x += v; x2 += v*v; n += 1; } printf("media: %lf, desvio: %lf\n", x/n, sqrt(x2/n - (x/n)*(x/n))); return 0; }
Faltou algum exemplo?
Critérios de correção:
Date: 2010-08-26 18:27:51 BRT
HTML generated by org-mode 6.21b in emacs 23