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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ SymbolicC++ http://www.cyberforum.ru/cpp-beginners/thread971508.html
Всем привет, никто случайно не может прислать готовый проект для MVS 2012? А то какой день подключаю библиотеки, и максимум чего добился - одной ошибки, но и та связана со сборкой lib в проект.
C++ 64-битовая строка Необходимо реализовать структуру 64-битовой строки состоящей из двух unsigned long полей, с последующей возможностью использования битовых операций(NOT, AND, OR, XOR). Есть кое-какой код, но он просто ужасен и функция Bin(перевод в двоичную) работает не совсем верно, а именно нет возможности перевода числа более 4294967295(максимум unsigned long'а) Заранее спасибо. #include... http://www.cyberforum.ru/cpp-beginners/thread971505.html
C++ Объясните, как подсчитать количество дробных чисел в выборке?
Понимаю, что нужно делать через if и else, но мой начальный уровень помогает только запутаться
Матрица. Диагонали в прямоугольнике C++
Задание дано так: Дана матрица с размерами A Максимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы. Есть идея разделить всю матрицу на три части,на три типа диагоналей. 1. Увеличивающийся. Например: summa1 = abs( A ); summa2 = abs( A ) + abs( A ); summa3 = abs( A ) + abs( A ) + abs( A) ; summa4 = abs( A ) + abs( A ) + abs( A) + abs( A;
C++ помогите перевести программу с паскаля на С++ http://www.cyberforum.ru/cpp-beginners/thread971496.html
Ребят , помогите перевести программу с паскаля на С++ , или подскажите как написать нечто подобное. Заранее благодарен. Вот задание : №1. Дано натуральное число N. Определить, является ли оно автоаморфным. Автоаморфное число N равно последним разрядам квадрата этого числа. А вот код паскаля :
C++ Сформировать массив С, каждый элемент которого равен максимальному значению соответствующих элементов массивов А и В 1) Даны два массива А и В одинаковой размерности. Сформировать массив С, каждый элемент которого равен максимальному значению соответствующих элементов массивов А и В. подробнее

Показать сообщение отдельно
NanoBreaker
 Аватар для NanoBreaker
23 / 23 / 7
Регистрация: 11.07.2013
Сообщений: 82
07.10.2013, 20:04     Возможная пробелами с типами данных
Здравствуйте!

Есть следующие задание:
http://s5.hostingkartinok.com/upload...7477d9619b.png

Её я решил, вот получившийся код (на код в комментариях не обращайте внимание, сделал 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 -
Кликните здесь для просмотра всего текста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 08:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru