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

Число не входит по размеру в тип данных - C++

Восстановить пароль Регистрация
 
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
09.10.2012, 10:05     Число не входит по размеру в тип данных #1
При вводе вводим следующее: выбираем первый пункт, затем x=2, E = 30. Когда факториал доходит до числа 35, то выводится #INFOO; Как можно исправить проблему?
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
 
double MachineZero();
int function();
 
int main()
{
    int count, n, q, sum, number;
    unsigned int factor;
    float x;
    double y, z, w;
    double b;
    float E; //это наша точность
    w = 0; // для подсчёта суммы ряда
 
    printf("Choose number 1 or 2\n");
    printf("1).E-zaday sam; X - zaday sam\n");
    printf("2).E-max; X - zaday sam\n");
    scanf("%d", &number);
 
    switch(number) {
 
    case 1: // 1-й случай
    printf("Enter x:\n");
    scanf("%f", &x);
    printf("Enter E:\n");
    scanf("%f", &E);
 
    for(n=1;;n++) {
    y = pow(x, 2*n+1);
    z = pow(-1.0, n);
    printf("y: %.0f\nz: %.0f\n", y, z);
 
    q = 2*n+1;
    factor=1;
    for(count=1;count<=q;count++) factor= factor*count;
    printf("Faktorial chisla %d raven %d\n", q, factor);
 
    b = z/factor*y;
    printf("%f\n\n", b);
 
    w = b+w;
 
    if(E<fabs(b)) {
    printf("Sum ryada do tochnosty %f ravna: %f\n", E, w);
    break;
    }
 
    }
 
    break;
    
    case 2: // 2-й случай
 
    printf("Enter x:\n");
    scanf("%f", &x);
    E = MachineZero();
    printf("Our E: %e\n", E);
 
    for(n=1;;n++) {
    y = pow(x, 2*n+1);
    z = pow(-1.0, n);
    printf("y: %.0f\nz: %.0f\n", y, z);
 
    q = 2*n+1;
    factor=1;
    for(count=1;count<=q;count++) factor= factor*count;
    printf("Faktorial chisla %d raven %d\n", q, factor);
 
    b = z/factor*y;
    printf("%f\n\n", b);
 
    w = b+w;
 
    if(E<fabs(b)) {
    printf("Sum ryada do tochnosty %e ravna: %f\n", E, w);
    break;
    }
 
    }
    break;
 
    default: // по default
        printf("wrong number\n");
 
    } //end of switch
    
 
 
    system("pause");
    return 0;
}
 
 
double MachineZero(){
    float v,u=1;
    do{
        v=u;
        u/=2;
    }while (u);
    return v;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2012, 10:05     Число не входит по размеру в тип данных
Посмотрите здесь:

C++ Перечисляемый тип данных.Символьный тип.
Создать абстрактный тип данных (структура) - вектор, который имеет указатель на short и число элементов C++
4.53. Дано трехзначное число. Определить: а) входит ли в него цифра 6, б) входит ли в него цифра n C++
C++ Создать тип данных Многоразрядное число
Создать абстрактный тип данных - класс вектор, который имеет указатель на long, число элементов и переменную состояния C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
 Аватар для Байт
13955 / 8786 / 1222
Регистрация: 24.12.2010
Сообщений: 15,913
09.10.2012, 10:26     Число не входит по размеру в тип данных #2
Применить длинную арифметику
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
09.10.2012, 10:29  [ТС]     Число не входит по размеру в тип данных #3
Цитата Сообщение от Байт Посмотреть сообщение
Применить длинную арифметику
Это как? Распишите подробнее пожалуйста
Байт
 Аватар для Байт
13955 / 8786 / 1222
Регистрация: 24.12.2010
Сообщений: 15,913
09.10.2012, 10:36     Число не входит по размеру в тип данных #4
Цитата Сообщение от aleksand Посмотреть сообщение
Это как? Распишите подробнее пожалуйста
Поищите в гугле и на форуме
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
09.10.2012, 12:53     Число не входит по размеру в тип данных #5
Ну есть ещё long long для тех кому мало int. Если и его не хватате - вам придёться написать свой класс (реализовать через массив например) поддерживающий операции + - и остальные какие вам там понадобятся. Последний вариант конечно в разы медленнее, но других вариантов нет.
Байт
 Аватар для Байт
13955 / 8786 / 1222
Регистрация: 24.12.2010
Сообщений: 15,913
09.10.2012, 13:11     Число не входит по размеру в тип данных #6
Цитата Сообщение от Gepar Посмотреть сообщение
Ну есть ещё long long для тех кому мало int.
Ну, lond long меньше double, а ТС использует именно double. И судя по всему, требуются очень большие факториалы
Если и его не хватает - вам придется написать свой класс (реализовать через массив например) поддерживающий операции + - и остальные какие вам там понадобятся.
Да, это и есть длинная арифметика. Но свой класс выдумывать не обязательно. в гугле и на форуме таких реализаций вагон и маленькая тележка. ИМХО, логичнее всего делать через вектора
Последний вариант конечно в разы медленнее, но других вариантов нет.
Тут уж ничего не поделаешь! Какова задача - такие и расходы!
Yandex
Объявления
09.10.2012, 13:11     Число не входит по размеру в тип данных
Ответ Создать тему
Опции темы

Текущее время: 08:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru