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

Как отключить переполнение для переменных - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
White Luna
 Аватар для White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
17.09.2012, 17:35     Как отключить переполнение для переменных #1
у мены вот такая задача:
метод получения равномерно-распределенных случайных чисел, основанный на умножении, и использующий 32-х разрядную переменную

код по идеи вот такой, но у меня появляется проблема с переполнением, в задание сказано что его можно отключить вообще или для конкретной переменной, но как это сделать? пыталась по сети найти, но не получилось, подскажите, кто что знает.

главное что обидно что код запускается и ошибки не показывает и значение не выводит
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
#include "stdafx.h"
#include <conio.h>
#include <math.h>
#include <iostream>
using namespace std;
 
long b=1, y, r;
long rundum () 
{
    y=b*1220703125;
    if(y<0)
        {
            y=y+2*1073741824; // увел  дважды для коррекции
            r=y*(0,4656613*10^(-9));
            b=y;
        }
    return r;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    cout<<"искомое псевдослучайное число:";
    rundum();
 
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
17.09.2012, 18:09     Как отключить переполнение для переменных #2

Не по теме:

Кликните здесь для просмотра всего текста
> у мены
> по идеи
> rundum
Мои глаза.


Во-первых, насколько мне известно, переполнение в Си++ не отключается и не детектируется. (Если наши понимания слова "переполнение" совпадают.)

Во-вторых, вот это:
r=y*(0,4656613*10^(-9));
присваивает r отнюдь не дробное 0,0000000004656613, а вообще –13969839 (на 32-битной машине).

В-третьих, вы выводите только строку, а не число.
cout << "искомое псевдослучайное число: " << rundum();
Вот так выводится ещё и число.
White Luna
 Аватар для White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
17.09.2012, 21:25  [ТС]     Как отключить переполнение для переменных #3
C++
1
 return r;
число я надеюсь вывести через функцию
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
#include "stdafx.h"
#include <conio.h>
#include <math.h>
#include <iostream>
using namespace std;
 
long b=1, y, r;
long rundum () 
{
    y=b*1220703125;
    if(y<0) {y=y+2*1073741824;} // увел  дважды для коррекции
        r=y*(0,4656613*10^(-9));
        b=y;    
    return r;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    cout<<"искомое псевдослучайное число:";
    rundum();
    
    int m=10, n=1000; // по заданию m-разбиение, n- кол-во запусков
    cout<<" "<<endl;
    system("pause");
    return 0;
}
я чуть поправила код, там ошиблась в условии,
и получаю ошибку не критическую на переполнение:

Предупреждение 1 warning C4307: *: переполнение целой константы c:\users\user\documents\visual studio 2010\projects\1l_km\1l_km\1l_km.cpp 14 1 1l_km
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
17.09.2012, 22:45     Как отключить переполнение для переменных #4
White Luna, ну можно double использовать. Ваш К.О.
Topotun
87 / 46 / 7
Регистрация: 16.09.2012
Сообщений: 192
17.09.2012, 23:03     Как отключить переполнение для переменных #5
long double попробовать можно...ну а вообще, отключить переполнение кажется никак не получится..
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
17.09.2012, 23:18     Как отключить переполнение для переменных #6
еслиб его можно былоб отключить сколько шибок еще полезло бы у некоторых умелцев. некоторым байта много, некоторые в 16 гиг оперативы не укладываются...
Topotun
87 / 46 / 7
Регистрация: 16.09.2012
Сообщений: 192
17.09.2012, 23:21     Как отключить переполнение для переменных #7
ну Matlab же выводит огромные числа и памяти вроде всем хватает на Matlab..и он на чистом С же вроде бы написан..Всё дело в алгоритме.
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
18.09.2012, 01:57     Как отключить переполнение для переменных #8
Topotun, там используются финты типа разделения числа на элементы массива.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2012, 18:32     Как отключить переполнение для переменных
Еще ссылки по теме:

C++ Как отключить backspace
Как отловить переполнение границ типа (INT)? C++
C++ Как происходит переполнение при делении

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

Или воспользуйтесь поиском по форуму:
White Luna
 Аватар для White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
18.09.2012, 18:32  [ТС]     Как отключить переполнение для переменных #9
ок, сделала с double, вроде заработало всем спс
Yandex
Объявления
18.09.2012, 18:32     Как отключить переполнение для переменных
Ответ Создать тему
Опции темы

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