LINUX.ORG.RU

[Вдоль] Borland C++


0

0

Пришлось на Borland C++ писать программу. Уже час сижу и не могу понять почему fact равен нулю:

double func(double x, int k)
{
int fact=1,i;
float y;
for (i=2;i<=2*k+1;i++) fact*=i;
...

причём с переменной К всё нормально.

HELP !

>Пришлось на Borland C++

Сначала он поставил семёрку.

Теперь пишет на Borland C++.

Потом он напишет версию своей поделки только под х86.

Вот так наркотики ломают жизни

Ab-1 ()

вот весь быдлокод:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double func(double x,int k)
{
int fact,i;
float y;
fact=1;
for (i=2;i<=2*k+1;i++) fact*=i;
y=pow(-1,k)*(pow(x,2*k+1)/fact);
return y;
}

int main()
{
float e=0.1,x,y;
int k=0;
printf(«Enter X: »); scanf(«%f»,&x);
y=func(x,k++);
while(fabs(y)>e&&k<100)
{ y+=func(x,k++); printf(«\nf=%f k=%d»,y,k); }
printf(«f=%f k=%d»,y,k);
return 0;
}

unrealix ()

>Уже час сижу

По шагам проверяй :}

Deleted ()
Ответ на: комментарий от Deleted

то что факториал равен нулю проверял и пошагам и не пошагам и в кодеблоксе такую же хрень мне оно лепит

unrealix ()

А если её как флоат объявить?

Yareg ★★★ ()
Ответ на: комментарий от Ab-1

я просто уже на пределе: такая тупость и я не могу понять в чём дела

unrealix ()
Ответ на: комментарий от Deleted

перед - сначала инкремент, после - сначала передаётся потом инкремент

unrealix ()
Ответ на: комментарий от unrealix

Компилируй в ассемблерный выхлоп и разбирайся, что оно у тебя на самом деле делает. А тупая замена факт*=и на факт=факт*и пробовалась?

Yareg ★★★ ()
Ответ на: комментарий от wyldrodney

кстати, твоя фишка прокатила в кодеболксе и теперь там всё считает, а в Borland C++ - нет

unrealix ()

Ах да, посылаю миллиарды лучей ненависти и поноса корявым IDE и всяпим ЯП !

unrealix ()
Ответ на: комментарий от unrealix

Тьфу, кажется мне показалось :\ Понафтыкай везде отладочную инфу и смотри :)

Deleted ()
Ответ на: комментарий от Deleted

А в выводе никаких нулей не вижу если gcc собрать. Ну что, начинай по одному убирать всякие могучие фишки += ++ и т.д. и делать как встарину. Потом смотреть, в каком месте впервые берётся ноль по шагам с отладочной печатью можно даже :} Под раннее утро особо что-то не думается.

Deleted ()
Ответ на: комментарий от unrealix

Я вообще на рубях пишу :} Хотя в седой древности как-то была парочка программ на Borland'овском C++ Builder'е, но это было давно и особо полезного там не было почти ничего.

Кстати, пример выполнения:

: ./test
Enter X: 5

f=-15.833334 k=2
f=10.208332 k=3
f=-5.292660 k=4
f=0.089629 k=5f=0.089629 k=5

Deleted ()

>Пришлось на Borland C++ писать программу.

Borland C++??
Попробуй С++ Builder. Вроде 2010 текущий.

Pavval ★★★★★ ()
Ответ на: комментарий от unrealix

100! знаешь как догуя? Может у тебя переполнение int идет?

vada ★★★★★ ()

> Пришлось на Borland C++ писать программу

Модель памяти какая используется? В fact (int) часом нет переполнения?

andreyu ★★★★★ ()
Ответ на: комментарий от unrealix

да, есть у меня такой)))
Borland C++ 5.02:
[quote]
Enter X: 10

f=-156.666672 k=2
f=676.666626 k=3
f=-1307.460327 k=4
f=1448.271606 k=5
f=-1056.939331 k=6
f=4118.900879 k=7
f=-494805.906250 k=8
f=-347088544.000000 k=9
f=-91553234944.000000 k=10
f=-928293191680.000000 k=11
f=-116876537495552.000000 k=12
f=4699660052594688.000000 k=13
f=-668799181913063424.000000 k=14
f=-81215619899720728580.000000 k=15
f=-13627725839236908190000.000000 k=16
f=-479288997073050566400000.000000 k=17
[/quote]
+ соощение от самого:
Fault: floating point divide by zero

xydo ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.