#c #nan
#c #nan
Вопрос:
Моя учительница дала это домашнее задание. В основном у меня есть два числа, a и b. Я должен показать на консоли ответ этой формулы для каждого добавленного числа » а » h=(b-a)/10, но в консоли я вижу только nan. Как я могу устранить эту ошибку? Мой код таков:
#include lt;iostreamgt; #include lt;math.hgt; using namespace std; double s(double x){ long f = 1; long double anw=1; for(int k=1;klt;=100;k ){ f=k*f; anw=((pow((x-1),k)*pow(log(3),k))/f) anw; } return anw; } int main(){ double a=0.2, b=0.8, h; h=(b-a)/10; for(double x=a; xlt;=b ;x =h){ coutlt;lt;"s(x)="lt;lt;s(x)lt;lt;endl; } return 0; }
Извините за мой плохой английский!
Комментарии:
1. Не связан, но
math.h
является заголовком C, который, строго говоря, не существует в C . Эквивалентным заголовком C являетсяcmath
.2. @Brian — строго говоря, заголовки C существуют в C . Всегда так было и всегда будет. Да, людям обычно следует использовать
cxxx
версии, но версии C работают просто отлично, если вы не возражаете против загрязнения глобального пространства имен.3. @PeteBecker Ах, значит, ты прав. Они существуют как устаревшая функция под заголовками [depr.c.]. Спасибо за исправление!
Ответ №1:
Вы получаете переполнение целого числа со знаком f=k*f;
, поэтому я предлагаю вам сделать f
double
:
double s(double x){ double f = 1; // double long double anw=1; for(int k=1;klt;=100;k ){ f = k * f; // or else you get a signed integer overflow here // f *= k; // a simpler way of writing the above anw=((pow((x-1),k)*pow(log(3),k))/f) anw; } return anw; }
Еще одно примечание: Включите заголовок C cmath
вместо заголовка math.h
C.