
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.193] |
![]() |
|
Сообщ.
#1
,
|
|
|
[attach=#0]
![]() ![]() #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); } В си я еще нубик, поэтому, не пойму в чем проблема, т.к. по мне в коде все првильно, а выводит чушь |
Сообщ.
#2
,
|
|
|
Откройте для себя отладчик.
|
Сообщ.
#3
,
|
|
|
1,#INF00 - infinity, бесконечность (причины - деление на ноль к примеру)
1,#IND00 - indeterminate, тоже что и NaN (not a number), неопределённость (причины - 0/0, корень из отрицательного и т.д.) Какие причины у тебя - смотри в отладчике. Написал бы хоть что вводить чтобы такой вывод получить. Или при любых входных значениях такое? Добавлено Цитата ![]() ![]() p3*=con/(k+1)/k; //вычисление слагаемого в знаменателе Это что? И чему по-твоему должно быть равно p3 при k=0 (первая итерация цикла)? |
Сообщ.
#4
,
|
|
|
И вообще подряд два деления в выражении - детский сад.
|
Сообщ.
#5
,
|
|
|
Цитата prografix @ В смысле? И вообще подряд два деления в выражении - детский сад. |
Сообщ.
#6
,
|
|
|
Хороший программист вместо
![]() ![]() p3 *= con / (k+1) / k; напишет ![]() ![]() p3 *= con / ( (k+1) * k ); |
Сообщ.
#7
,
|
|
|
Цитата prografix @ Почему? Хороший программист вместо |
Сообщ.
#8
,
|
|
|
Потому что это более читаемо чем трёхэтажные дроби, плюс умножение намного быстрее деления даже на х86, не говоря уже про процессоры, у которых аппаратного деления нет вообще.
Компилятор сам деление на умножение не заменит из-за возможного переполнения при умножении. |
Сообщ.
#9
,
|
|
|
Цитата cppasm @ Вот именно. из-за возможного переполнения при умножении. |
Сообщ.
#10
,
|
|
|
Ну это уже по допустимым диапазонам значений смотреть надо.
В большинстве случаев замена возможна. |