Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
23 / 23 / 10
Регистрация: 11.07.2013
Сообщений: 94
1

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте!

Есть следующие задание:


Её я решил, вот получившийся код (на код в комментариях не обращайте внимание, сделал 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 -

Когда double -
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.10.2013, 20:04
Ответы с готовыми решениями:

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

Разработка программ с интегрированными типами данных (структуры данных)
Может кто-нибудь помочь с этим? Как задать структуру я, вроде, понимаю. Но не могу понять, как с...

Объясните, пожалуйста в чем разница между типами-значениями и ссылочными типами?
В чем разница между типами-значениями и ссылочными типами. Привести пример типов-значений и...

Как самому установить соответствие между типами API функции в MSDN и типами VB
Как самому установить соответствие между типами данных, приведенных на API функции в MSDN и типами...

2
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
07.10.2013, 21:03 2
Больше действий - больше погрешность. В pow чтобы получить n-ую степень надо сделать грубо говоря logn операций. А при вычислении по этой формуле число операций растет экспоненциально. Ну и вот.
1
23 / 23 / 10
Регистрация: 11.07.2013
Сообщений: 94
07.10.2013, 21:23  [ТС] 3
Получается используя формулу, рано или поздно по любому будет выходить фуфло? Раз так, то ладно. Спасибо за ответ!
0
07.10.2013, 21:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2013, 21:23
Помогаю со студенческими работами здесь

Ошибка с типами данных
var F,m,H,U:single; V,L,i:real; const q = 0.47; // g = 9.8; // begin ...

Помощь с типами данных.
Dopustim est' fail 'base.b' s dannimi: vanialapuhu_vani@deneg.net104540061 ...

Задача с типами данных
Может, что-то уже было здесь, но не могу найти. Дано целое число Y - год, лежащее в диапазоне...

проблема с типами данных
помогите пожста. во втором селекте ругается на pdatr. Пишет &quot;Incompatible types: 'String' and...

Ошибка с типами данных
Давно на бейсике не программировал, нашёл старый код и не могу понять почему не работает (P.s....

Ошибка с типами данных
private void button3_Click(object sender, EventArgs e) //пытаюсь вызвать функцию, но не получается...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru