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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2013, 21:15   #1
blackart
 
Регистрация: 26.11.2012
Сообщений: 3
По умолчанию пропажа точности при расчете с дробями

Есть полностью рабочая программа, она находит корень К из числа Х с точностью prec.
Работает все хорошо, но при подсчетах с дробовыми числами идет потеря во втором-третем знаке.
Код
Код:

 
#include <stdio.h>;
#include <conio.h>;
#include <math.h>;
 
main()
{clrscr();
 
float x,k,prec,y,yk,b,z;
int p;
 
printf("enter number \n");
scanf(" %f",&x);
printf("enter degree\n");
scanf(" %f",&k);
printf("enter accuracy \n");
scanf(" %f",&prec);
y=1;
p=k;
if (x==0)
{ printf("x=0");}
if ((x>0) && (k>0))
{
do
{
yk=y;
for (int i=k-1; i>1; i--) yk=y*yk;
 
b=(1/k)*((x/yk)-y);
if (fabs(b)>prec) y=y+b;
}
while (fabs(b)>prec);
 
printf("result:  %f \n",y); }
 
if ((x>0) && (k<0))
{k=abs(k);
do
{
yk=y;
for (int i=k-1; i>1; i--) yk=y*yk;
 
b=(1/k)*((x/yk)-y);
if (fabs(b)>prec) y=y+b;
}
while (fabs(b)>prec);
z=1/y;
printf("result:  %f \n",z); }
 
 
if ((x<0) && (k>0) && ((p%2)!=0))
{x=abs(x);
do
{
yk=y;
for (int i=k-1; i>1; i--) yk=y*yk;
 
b=(1/k)*((x/yk)-y);
if (fabs(b)>prec) y=y+b;
}
while (fabs(b)>prec);
z=y-2*y;
printf("result:  %f \n",z); }
 
 
 
if ((x<0) && (k<0) && ((p%2)!=0))
{x=abs(x);
k=abs(k);
do
{
yk=y;
for (int i=k-1; i>1; i--) yk=y*yk;
 
b=(1/k)*((x/yk)-y);
if (fabs(b)>prec) y=y+b;
}
while (fabs(b)>prec);
z=1/(y-2*y);
printf("result:  %f \n",z); }
 
if ((x<0) && ((p%2)==0))
{printf("inccorect, if x<0, degree must be unparne");}
 
if (k==0)
{printf("  degree cant be zero");}
 
 
 
getch();
return 0;
 
}
при числе 0.25, степени кореня 4.4 получается ответь аля 0.704111. Должно при этих значениях получатся 0.72974005.
Просьба помочь, ибо как тут выкрутится я не знаю. точностьи 1Е-5 обычно хватает
blackart вне форума Ответить с цитированием
Старый 01.03.2013, 21:16   #2
blackart
 
Регистрация: 26.11.2012
Сообщений: 3
По умолчанию

double вместо float ничего не изменяет.
blackart вне форума Ответить с цитированием
Старый 02.03.2013, 14:24   #3
ArmanPrestige
Главное желание.
Форумчанин
 
Регистрация: 28.11.2011
Сообщений: 122
По умолчанию

На сколько я знаю это нормально для double & float. Они теряют точность. Решение проблемы я не подскажу, поскольку я не помню. Погугли.
Я могу, Я хочу, Я буду!
ArmanPrestige вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в расчете интеграла методом трапеций user-04 Visual C++ 2 25.12.2012 20:52
Определить сумму к выплате при расчете заработной платы для 7 сотрудников..(Excel) LizzZi Помощь студентам 1 30.05.2011 18:30
Форматирование ячейки при расчете. %$PROregRAMi$t% Microsoft Office Excel 5 18.08.2010 04:08