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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
NanoBreaker
23 / 23 / 7
Регистрация: 11.07.2013
Сообщений: 89
#1

Возможная пробелами с типами данных - C++

07.10.2013, 20:04. Просмотров 256. Ответов 2
Метки нет (Все метки)

Здравствуйте!

Есть следующие задание:
[IMG]http://s5.********************/uploads/images/2013/10/f918d6e0a9bf1c4476ca287477d9619b.png[/IMG]

Её я решил, вот получившийся код (на код в комментариях не обращайте внимание, сделал 2 варианта, потому что парень которому помогал еще не учил рекурсию и дополнительные возможности библиотеки math.h):

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
#include <iostream>
#include <iomanip>
#include <math.h>
#include <conio.h>
#include <fstream>
 
using namespace std;
 
float analytical(short int n)
{
    return pow(1.0/3.0,n);
    /*float buff = 1.0/3.0;
    for(int i = 0; i < n; i++) buff = buff * (1.0/3.0);
    return buff;*/
}
 
float numerical(short int n)
{
    if( n == 0 ) return 1.0;
    if( n == 1 ) return 1.0/3.0;
    if( n > 1 ) return ( 19.0/3.0 * numerical(n - 1) - 2 * numerical(n - 2) );
    /*if(n > 1)
    {
        float first = 1.0;
        float second = 1.0/3.0;
        float outputf = 0;
        for(int i = 1; i < n; i++)
        {
            outputf = (19.0/3.0 * second - 2 * first);
            first = second;
            second = outputf;
        }
        return outputf;
    }*/
}
 
int main()
{
    ofstream outputfile("output.txt");
    //cout.flags(std::ios::fixed);
    outputfile.flags(std::ios::fixed);
 
    for(short int n = 0; n < 21; n++)
    {
        outputfile << setw(3) << n << setw(30) << setprecision(12) << analytical(n) << setw(30) << numerical(n) << setw(30) << abs( (analytical(n) - numerical(n))/analytical(n) ) << setw(30) << abs( analytical(n) - numerical(n) ) << endl;
    }
    getch();
    outputfile.close();
    return 0;
}
Проблема следующая:
При выводе значения функции "numerical", уже на n = 8 значение начинается увеличиваться вместо того чтоб дальше убывать, в следствии и погрешность неправильная. По моему мнению вся проблема в типе данных, float не достаточно большой, а при использование double, значение начинает возрастать чуть позже, на n = 14. Но тогда такой вопрос, почему такая же проблема не возникает с pow(1.0/3.0,n)? Надеюсь кто-то сможет дать мне ответы. Заранее спасибо!

Если проблема еще не ясна, можете скомпилировать программу или же глянуть мой вывод ниже.
Вывод:
Когда float -
Кликните здесь для просмотра всего текста
[IMG]http://s5.********************/uploads/images/2013/10/4de86907b252f6cc75bb154e9d4783b3.png[/IMG]

Когда double -
Кликните здесь для просмотра всего текста
[IMG]http://s5.********************/uploads/images/2013/10/b3dffbaf945f87391c11b7d36ce1bddf.png[/IMG]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2013, 20:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возможная пробелами с типами данных (C++):

Путаница с типами данных TCHAR и char. Какой тип данных выбрать? - C++
Я создавал тему в соседнем разделе:http://www.cyberforum.ru/cpp-networks/thread1119035.html Насколько я понял, то POST-данные в TCHAR...

Проблема с типами данных - C++
В одной функции одномерный динамический массив заполняется случайными числами // Çàïîëíåíèå ìàññèâà ñëó÷àéíûìè ÷èñëàìè int...

Ошибка с типами данных в подпрограмме - C++
Не знаю, правильно ли я задал названия темы, суть проблемы следующая: Нужно было создать программу с структурой данных, в которой по...

Работа с типами данных в массиве - C++
Всем доброго времени суток , помогите выяснить одну вещь. Есть у меня массив типа char. Вот к примеру {1f-21df } Каким образом...

Работа со структурными типами данных - C++
Задание: В файле записан массив A(nxm) целых чисел. Структура файла следующая: сначала хранится n и m, а затем массив A. Определить в нем...

Массив с двумя типами данных - C++
&quot;Дан двумерный массив,в нем хранится информация о рабочих и их номера телефонов.Реализовать поиск по Фамилии и вывода телефона&quot; Подкиньте...

2
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
07.10.2013, 21:03 #2
Больше действий - больше погрешность. В pow чтобы получить n-ую степень надо сделать грубо говоря logn операций. А при вычислении по этой формуле число операций растет экспоненциально. Ну и вот.
1
NanoBreaker
23 / 23 / 7
Регистрация: 11.07.2013
Сообщений: 89
07.10.2013, 21:23  [ТС] #3
Получается используя формулу, рано или поздно по любому будет выходить фуфло? Раз так, то ладно. Спасибо за ответ!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2013, 21:23
Привет! Вот еще темы с ответами:

Помогите разобраться с типами данных - C++
Здравствуйте! Размер (в байтах) объектов каких типов данных зависит от разрядности процессора?

Пoмoгите со строковыми типами данных - C++
Дан текст, состоящий не менее чем из пяти слов. Вывести на экран слова, которые имеют одинаковые окончания &quot;ИЯ&quot;,&quot;ИСТ&quot;,&quot;ИКА&quot;. С этой темой...

Организация управления типами данных - C++
Поясните, пожалуйста, как происходит разделение типов данных в памяти? как компилятор определяет в каких ячейках хранятся соответствующие...

Двухмерный массив с разными типами данных - C++
Доброе время суток. Есть задание Задание поменять нет возможности, да и самому доделать хочется. Есть кое какие наработки, и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru