На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Программа выдает непонятные значения, с чем это может быть связано? , 1,#INF00 1,#IND00
    [attach=#0]
    ExpandedWrap disabled
      #include<stdio.h>
      #include<math.h>
      #include<locale>
      float t(float x);
      main()
      {     setlocale(LC_ALL, "Russian");
            float d,y;
            printf("Введите y->");
            scanf("%f\n",&y);    
            d=((1.7*t(0.25)+2*t(1+y))/(6-t(y*y-1)));
            printf("d=%f",d);
            getchar();
            getchar();
      }
      //описание функции t
       
      float t(float x)
      {
            int k;
            float a,b,res,con,p4,p3,s4,s3;
            con=x*x;
            s4=p4=x;
            s3=p3=1;
            for(k=0;k<=10;k++)
            {
               p4*=con/(k+1)/(k+2);//вычисление слагаемого в числителе
               s4+=p4;             //вычисление числителя
               p3*=con/(k+1)/k;    //вычисление слагаемого в знаменателе
               s3+=p3;             //вычисление знаменателя
            }  
            printf("s3=%f\n",s3);    
            printf("s4=%f\n",s4);            
            res=s4/s3;
            getchar();
            return (res);
            
      }
    [/attach]
    В си я еще нубик, поэтому, не пойму в чем проблема, т.к. по мне в коде все првильно, а выводит чушь
      Откройте для себя отладчик.
        1,#INF00 - infinity, бесконечность (причины - деление на ноль к примеру)
        1,#IND00 - indeterminate, тоже что и NaN (not a number), неопределённость (причины - 0/0, корень из отрицательного и т.д.)

        Какие причины у тебя - смотри в отладчике.
        Написал бы хоть что вводить чтобы такой вывод получить.
        Или при любых входных значениях такое?

        Добавлено
        Цитата
        ExpandedWrap disabled
          p3*=con/(k+1)/k;    //вычисление слагаемого в знаменателе

        Это что? И чему по-твоему должно быть равно p3 при k=0 (первая итерация цикла)?
          И вообще подряд два деления в выражении - детский сад.
            Цитата prografix @
            И вообще подряд два деления в выражении - детский сад.
            В смысле?
              Хороший программист вместо
              ExpandedWrap disabled
                p3 *= con / (k+1) / k;

              напишет
              ExpandedWrap disabled
                p3 *= con / ( (k+1) * k );
                Цитата prografix @
                Хороший программист вместо
                Почему?
                  Потому что это более читаемо чем трёхэтажные дроби, плюс умножение намного быстрее деления даже на х86, не говоря уже про процессоры, у которых аппаратного деления нет вообще.
                  Компилятор сам деление на умножение не заменит из-за возможного переполнения при умножении.
                    Цитата cppasm @
                    из-за возможного переполнения при умножении.
                    Вот именно.
                      Ну это уже по допустимым диапазонам значений смотреть надо.
                      В большинстве случаев замена возможна.
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0550 ]   [ 16 queries used ]   [ Generated: 31.07.25, 22:46 GMT ]