Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

17.09.2012, 17:35. Просмотров 1526. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2012, 17:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как отключить переполнение для переменных (C++):

Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)? - C++
Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)? ( что только я не пробывал: то переменные...

Как отследить переполнение в int64 - C++
Подскажите, как отследить переполнение при выполнении операций с _int64? Exception-ы не возникают! Заранее благодарен!

Как происходит переполнение при делении - C++
Форумчане,подскажите желательно на С++, каким образом происходить переполнение буфера(или стэка) при операции деления?

Как можно сделать переполнение стека - C++
Всем привет, ребята, есть у меня код с микрософта, как переполнить стек. Но беда, не понимаю кое что, напишу в комментариях. void...

Как отловить переполнение границ типа (INT)? - C++
Сразу напишу пример для наглядности: int fx = -2147483648 if(fx == -fx) { //ляляля } В 32 битах максимум и минимум...

Как определить переполнение разядной сетки из n байт? - C++
Как определить переполнение разядной сетки из n байт?

8
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 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();
Вот так выводится ещё и число.
0
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
0
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 908
17.09.2012, 22:45 #4
White Luna, ну можно double использовать. Ваш К.О.
0
Topotun
89 / 48 / 7
Регистрация: 16.09.2012
Сообщений: 207
17.09.2012, 23:03 #5
long double попробовать можно...ну а вообще, отключить переполнение кажется никак не получится..
0
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 908
17.09.2012, 23:18 #6
еслиб его можно былоб отключить сколько шибок еще полезло бы у некоторых умелцев. некоторым байта много, некоторые в 16 гиг оперативы не укладываются...
0
Topotun
89 / 48 / 7
Регистрация: 16.09.2012
Сообщений: 207
17.09.2012, 23:21 #7
ну Matlab же выводит огромные числа и памяти вроде всем хватает на Matlab..и он на чистом С же вроде бы написан..Всё дело в алгоритме.
0
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 908
18.09.2012, 01:57 #8
Topotun, там используются финты типа разделения числа на элементы массива.
0
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
18.09.2012, 18:32  [ТС] #9
ок, сделала с double, вроде заработало всем спс
0
18.09.2012, 18:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2012, 18:32
Привет! Вот еще темы с ответами:

Как считать много битов из файла, чтобы не было переполнение стека? - C++
Проблема заключается в том, что при использовании стандартных функций read, происходит переполнение стека, а мне очень нужно считать всё и...

Какие операции доступны для целочисленных переменных и недоступны для вещественных? - C++
Какие операции доступны для целочисленных переменных и недоступны для вещественных? 1.Арифметические операции (сложение, вычитание,...

[trigraph] Как отключить? Как устранить триграф из литерной константы? - C++
Доброго времени суток. Сборка Debug при помощи mingw482_32. Возникла проблема с триграфами. Вообще то, я всегда думал, что...

Как отключить? - C++
Как отключить использование пространства имён? например: using namespace std; заранее спасибо!


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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