Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2011, 17:34   #1
peace on you
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 27
Восклицание СНУ на СИ

Привет всем, выручайте пожалуйста, такая трабла.
Си выделяет синим следующую строку и выдает ошибку(прикрепил).
Где математическая ошибка может быть? Кажется до того она мелкая, но глаза уже замазолились.
- расчеты
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
void main()
{
float f1,f2,e=0.001,x0=0.25,y0=0.5,x,y,k,n,pr,
      dx,dy,deltax,deltay,a,b,c,d;
met1: f1=cos((x0-y0)/3)-2*y0;
      f2=sin((x0+y0)/3)-2*x0;
a=-1/3*sin((x0-y0)/3); b=1/3*sin((x0-y0)/3)-2;
c=1/3*cos((x0+y0)/3)-2; d=1/3*cos((x0+y0)/3);
k=(b*f2*a)/d-f1/a;
n=1-(b*c*a)/d;
dx=k/n;
dy=(-f2-c*dx)/d;
x=x0+dx;
y=y0+dy;
deltax=fabs(dx);
deltay=fabs(dy);
if (deltax>e && deltay>e)
{x0=x,y0=y;
goto met1;}
else {printf("x=%f  y=%f\n",x,y);
 pr=sin((x0+y0)/3)-2*x0;
 printf("pr=%f\n",pr);}
getch( );
}
Изображения
Тип файла: bmp si.bmp (116.9 Кб, 142 просмотров)

Последний раз редактировалось peace on you; 25.11.2011 в 18:03.
peace on you вне форума Ответить с цитированием
Старый 25.11.2011, 18:10   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

d по ходу дела равно 0.

а все потому, что
Код:
a = 1/3;
b = 1./3.;
дадут совершенно разные значения.

И это... плюнь в глаз тому, кто научил использовать в С оператор goto...
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062

Последний раз редактировалось Mandrivnyk; 25.11.2011 в 18:14.
Mandrivnyk вне форума Ответить с цитированием
Старый 25.11.2011, 18:17   #3
peace on you
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 27
По умолчанию

не, d не может быть равно 0, там же производные везде берутся.
peace on you вне форума Ответить с цитированием
Старый 25.11.2011, 18:23   #4
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от peace on you Посмотреть сообщение
не, d не может быть равно 0, там же производные везде берутся.
а ты вставь после строчек с вычислением вывод этих четырех переменных.
очень удивишься.

вот так, например:
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main()
{
float f1,f2,e=0.001,x0=0.25,y0=0.5,x,y,k,n,pr,
      dx,dy,deltax,deltay,a,b,c,d;
    f1=cos((x0-y0)/3)-2*y0;
    f2=sin((x0+y0)/3)-2*x0;
    a=-1/3*sin((x0-y0)/3);
    b=1/3*sin((x0-y0)/3)-2;
    c=1/3*cos((x0+y0)/3)-2;
    d=1/3*cos((x0+y0)/3);
    printf("%f %f %f %f\n", a, b, c, d);
    getch( );
}
но если ты строчку
Код:
a=-1/3*sin((x0-y0)/3)
напишешь, например, так:
Код:
a=-sin((x0-y0)/3)/3;
то все кардинально изменится.
Понимаешь, что именно я хочу объяснить?
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062

Последний раз редактировалось Mandrivnyk; 25.11.2011 в 18:30.
Mandrivnyk вне форума Ответить с цитированием
Старый 25.11.2011, 18:32   #5
peace on you
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 27
По умолчанию

код выдал что а и d равны нулю?! ничего не понимаю... мне всего то надо что бы проверка была равна нулю. Прорешивал сейчас другой вариант, всё получилось сразу... а мой косячит...
peace on you вне форума Ответить с цитированием
Старый 25.11.2011, 18:38   #6
peace on you
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Mandrivnyk Посмотреть сообщение
Понимаешь, что именно я хочу объяснить?

кажется понимаю, нам что то говорили про это.
Но есть одно но, я поставил вот так
Код:
a=-1.0/3.0*sin((x0-y0)/3); b=1.0/3.0*sin((x0-y0)/3)-2;
c=1.0/3.0*cos((x0+y0)/3)-2; d=1.0/3.0*cos((x0+y0)/3);
и теперь он синим обвел
Код:
else {printf("x=%f  y=%f\n",x,y);
з.ы. я даже поставил 0,33

Последний раз редактировалось peace on you; 25.11.2011 в 18:43.
peace on you вне форума Ответить с цитированием
Старый 25.11.2011, 19:13   #7
peace on you
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 27
По умолчанию

up
всё... нет вариантов более исправления этой ошибки?
peace on you вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц