C++. Кто знает как правильно возвести экспоненту в степень чтобы не было ошибок?

0 голосов
32 просмотров

C++. Кто знает как правильно возвести экспоненту в степень чтобы не было ошибок?


Информатика (166 баллов) | 32 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

У стандартной библиотеки плюсов с этим все хорошо. Если тебе нужна сверхточность, то придется использовать длинную арифметику и вычислять экспоненту через ряд Тейлора: image\inf" alt="e^x=1+x/1! + x^2/2! + ... + x^n/n!; n ->\inf" align="absmiddle" class="latex-formula"> либо для компьютерных вычислений гораздо эффективнее так(точность выше) e^x= \frac{1}{1-x/1!+x^2/2!-x^3/3!+...+(-1)^nx^n/n!} этот ряд быстрее сходится

(5.2k баллов)
0

#include
#include
using namespace std;

int main()
{
double z,y,f;
x=2.87;
y=0.84;
z=(2*x*y)/(x+cos(y));
f=(sin(y)*sin(y))*(sqrt(x)/(z+pow(e,2)*y));
cout <<"f=" <<f << endl;<br> return 0;
}

0

а переменную е определить не хочешь?

0

это разве не должно быть константой?

0

не такой

0

открываем заголовочник math.h, находим такой кусок:#ifndef __STRICT_ANSI__
#define M_E 2.7182818284590452354
#define M_LOG2E 1.4426950408889634074
#define M_LOG10E0.43429448190325182765
#define M_LN2 0.69314718055994530942
#define M_LN10 2.30258509299404568402
#define M_PI 3.14159265358979323846
#define M_PI_2 1.57079632679489661923
#define M_PI_4 0.78539816339744830962
#define M_1_PI 0.31830988618379067154
#define M_2_PI 0.63661977236758134308
#define M_2_SQRTPI1.12837916709551257390

0

Замечаем, что препроцессор видит число Эйлера немного по-другому

0

так а чего по-другому ?Вроде все как обычно

0

#define M_E2.7182818284590452354 ?

0

ну да, так это же не e, а M_E

0

Затупил(( Спасибо!!!