Подскажите, пожалуйста, как решать задачу 3.27.
Вот примерно так выглядеть должна задача:
double x, e, y, q, s, b;
while(true)
{
cout << "vvedite x " << endl;
cin >> x;
cout << "vvedite pogresnost E" << endl;
cin >> e;
y = (exp(x) - exp(- x)) / 2;
q = x;
for (int i = 0; fabs(q) >= e; i++)
{
s += q;
b = 2 * i + i;
q *= (pow(x, b)) / (2 * i + i);
}
cout << endl << "result " << endl;
cout << "levaya chast: " << y << endl;
cout << "pravaya chast: " << s << endl;
}
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double x;
do {
cout << " x: ";
cin >> x;
} while (x >= 1 || x <= -0.999999); // N.B.
double e;
do {
cout << " e: ";
cin >> e;
} while (e >= 0.1 || e < 1e-15);
double ln_x = log(1 - x);
double sum = 0;
int n = 1;
do {
sum += pow(x, n) / n;
++n;
} while (fabs(fabs(ln_x) - fabs(sum)) > e);
streamsize w = 19;
if (ln_x < 0) ++w;
cout << fixed << setprecision(16)
<< " ln_x = " << ln_x << endl
<< " sum = " << setw(w) << sum << endl;
cin.sync();
cin.get();
}
b = 2 * i + 1;
q = (pow(x, b)) / (2 * i - 1);
Данное разложение в ряд расходится. Им попросту ничего не вычислить, что выше единицы. Логарифм можно вычислять таким образом (т. е. как в предыдущей) :
ln(x) = 2*(x-1)/(x+1)*( 1/1 + 1/3*(x-1)/(x+1)^2+ 1/5*(x-1)/(x+1)^4 + 1/7*(x-1)/(x+1)^6 ...)
double log (double x){
int i;
double y = (x-1)/(x+1);
double ret = 1, temp = 0;
i=0;
double eps = 0.0000000001;
do{
i+=2;
temp = (1/(double)(i+1))*pow(y,i);
ret += temp;
}while(temp>eps);
ret*=2*y;
return ret;
}
y = (exp(x) - exp(- x)) / 2;
q = x;
for (int i = 0; fabs(q) >= e; i++)
{
s += q;
b = 2 * i + 1;
q = (pow(x, b)) / (2 * i - 1);
}
cout << endl << "result " << endl;
cout << "levaya chast: " << y << endl;
cout << "pravaya chast: " << s << endl;