Форум программистов, компьютерный форум CyberForum.ru

Увеличение точности при подсчетах - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Хеширование http://www.cyberforum.ru/cpp-beginners/thread798065.html
Вот такая проблема... Точнее их много, но если по порядку, то сейчас только такая проблема: Хеширование, методом середины квадрата, разрешение коллизий: метод открытая адресация. Есть код: #include <clocale> #include <stdio.h> #include<conio.h> class hashTable {
C++ Алгоритмы решения задачи Ниже прикреплено мое задание, собственно программу я уже написал, мне пришло на ум два алгоритма 1) Переписывать не повторяющиеся числа из одного массива в другой, то есть мы берем число из исходного массива и записываем его во второй массив, попутно проверяя нет ли его там уже, если такое есть, то мы пропускаем его и переходим к следующему 2) Просто проходим по массиву сравнивая текущий... http://www.cyberforum.ru/cpp-beginners/thread798059.html
C++ Взаимодействие двух объектов
Есть объект класса А. В нём есть массив объектов класса В. Программой предусмотрено поочерёдное обращение к элементам массива, с целью вызова методов класса В. В классе В есть указатель на объект-родитель класса А, по которому должно происходить обращение к данным объекта класса А. Ну и собственно возникает проблема описания таких классов. В описании класса А я обращаюсь к классу В, описание...
Нужен советом, что бы программа запускалась на windows 2003 server C++
Создал не сложную программу, на VisualStudio2012, на компе с windows 2003 server установил Microsoft Visual C++ 2010 Service Pack 1 (86х), Visual C++ Redistributable for Visual Studio 2012 (86х), и в проекте сборки указал "Use MFC in a Static Library" - "Use MFC in a Static Library". Но при запуске выдает ошибку "CRC-32 is not a valid Win32 application". Что делать ? Добавлено через 1 час 23...
C++ Заполнение пятимерного массива http://www.cyberforum.ru/cpp-beginners/thread798048.html
Здравствуйте! В книге Бондарева В.М. "Программирование на С++" приведена следующая задачка: Разместите в свободной памяти 5-мерный массив размером 2*2*2*2*2. Заполните его числами от 0 до 31. Массив разместил и заполнил. //размещаю int ((((*M)))) = new int; //заполняю
C++ Даны 2 строки. Определить, состоят ли они из одних и тех же символов. Даны 2 строки. Определить, состоят ли они из одних и тех же символов. подробнее

Показать сообщение отдельно
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
01.03.2013, 21:14     Увеличение точности при подсчетах
Вы теряете точность при вычислении суммы,скорее всего. И скорее всего, этот алгоритм не подходит для дробных степеней.
Да, и с вещественными не подходит abs, нужно использовать fabs.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
//#include <conio.h>;
#include <math.h>
double sum(double , double );
int main()
{
    double x,k,prec,y,z;
    int p;
    //printf("enter number \n");
    //scanf(" %f",&x);
    //printf("enter degree\n");
    //scanf(" %f",&k);
    //printf("enter accuracy \n");
    //scanf(" %f",&prec);
    x=0.25;
    k=4.;
    y=1;
    p=k;
    if (x==0) {
        printf("x=0");
    }
    if ((x>0) && (k>0)) {
        printf("result:  %f \n",sum (x,k));
    }
    if ((x>0) && (k<0)) {
        z=1/sum(x,fabs(k));
        printf("result:  %f \n",z);
    }
    if ((x<0) && (k>0) && ((p%2)!=0)) {
        z=sum(fabs(x),k)-2*sum(fabs(x),k);
        printf("result:  %f \n",z);
    }
    if ((x<0) && (k<0) && ((p%2)!=0)) {
        z=1/(sum(fabs(x),fabs(k))-2*sum(fabs(x),fabs(k)));
        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");
    }
    return 0;
}
double sum(double x, double k)
{
    double yk, prec=1e-6, y=1.0, b;
    int i;
    do {
        yk=y;
        for (i=k-1; i>1; i-=1) yk=y*yk; //????? здесь вы иеряете точность
        b=(1/k)*((x/yk)-y);
        if (fabs(b)>prec) y=y+b;
    } while (fabs(b)>prec);
    return y;
}
 
Текущее время: 03:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru