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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
#1

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

17.09.2012, 17:35. Просмотров 1383. Ответов 8
Метки нет (Все метки)

у мены вот такая задача:
метод получения равномерно-распределенных случайных чисел, основанный на умножении, и использующий 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2012, 17:35     Как отключить переполнение для переменных
Посмотрите здесь:

C++ Как отключить _CRT_SECURE_NO_WARNINGS?
C++ Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)?
Как отследить переполнение в int64 C++
C++ как отключить сетевую плату?
Как отключить? C++
как отключить перезапись файла? C++
Какие операции доступны для целочисленных переменных и недоступны для вещественных? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 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
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
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
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
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++ Как происходит переполнение при делении
Как можно сделать переполнение стека C++
Как определить переполнение разядной сетки из n байт? C++

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

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

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