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

Функция, перемножающая два числа с учётом переполнения - C++

Восстановить пароль Регистрация
 
BREAK350
1 / 1 / 0
Регистрация: 08.07.2012
Сообщений: 23
16.09.2012, 14:35     Функция, перемножающая два числа с учётом переполнения #1
привет)
помогите пожалуста с задачкой:
есть 2 числа типа unsigned short int (в програме использивать только short, нельзя брать что то, что больше 2байт). нужно реализовать функцию
unsigned short int Create(unsigned short int a,unsigned short int b,unsigned short int &c);
где, a,b-эти два числа, c-результат множения, тоисть
c=a*b;
но как мы знаем, этот результат может бить больше чем может хранить unsigned short int. Поэтому эта функция должна возвращать эту патерю. как я выяснил, результат должен бить таким:
A*(2 в степени 16)+c,
где A- то что возвращает функция. другими словами, с-младшая часть int, А-старшая
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2012, 14:35     Функция, перемножающая два числа с учётом переполнения
Посмотрите здесь:

Вывести в порядке убывания все целые числа, расположенные между A и B C++
C++ Функция которая сравнивает два целых числа и возвращает результат сравнения в виде знака: >, < или =
C++ функция,задающая два числа
подскажите что с кодом не так? (просуммировать два раза по два столбца, функция) C++
Даны два числа. Если квадратный корень из второго числа меньше первого числа, то увличить второе число в пять раз с++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
edward_jonson
 Аватар для edward_jonson
157 / 157 / 25
Регистрация: 23.02.2011
Сообщений: 388
16.09.2012, 14:56     Функция, перемножающая два числа с учётом переполнения #2
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
typedef unsigned short us;
 
us Create(us a, us b, us &c)
{
    if ( a * b >= pow(2, 16) )
    {
        us toRet = (a*b) / pow(2, 16);
        c = a*b - toRet * pow(2, 16);
        return toRet;
    }
    else
    {
        c = a * b;
        return 0;
    }
}
 
int main()
{
    us lowp = 0, highp = 0;
    us a = 1024, b = 1025;
    highp = Create(a, b, lowp);
    cout << highp << " * " << pow(2, 16) << " + " << lowp << " = " << (int)(highp * pow(2, 16) + lowp) << endl
         << a << " * " << b << " = " << (int)(a * b);
    return 0;
}
veverix
39 / 39 / 2
Регистрация: 14.09.2012
Сообщений: 85
16.09.2012, 15:02     Функция, перемножающая два числа с учётом переполнения #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cmath>
 
using namespace std;
 
unsigned short int a, b, c, overflow;
 
unsigned short int create(unsigned short int a, unsigned short int b, unsigned short int &c)
{
    c = a*b;
    return a*b>>16;
}
 
int main()
{
    cout<<"Vvedite argumenti"<<endl;
    cin>>a>>b;
    overflow = create(a, b, c);
    cout<<overflow*pow(2.0, 16.0)+c<<endl;
    system("pause");
    return 0;
}
BREAK350
1 / 1 / 0
Регистрация: 08.07.2012
Сообщений: 23
16.09.2012, 16:34  [ТС]     Функция, перемножающая два числа с учётом переполнения #4
а это будет работать если взять unsigned long int?
veverix
39 / 39 / 2
Регистрация: 14.09.2012
Сообщений: 85
16.09.2012, 18:47     Функция, перемножающая два числа с учётом переполнения #5
Цитата Сообщение от BREAK350 Посмотреть сообщение
а это будет работать если взять unsigned long int?
Зачем? Вся суть в том, что мы ограничены 2 байтами. По идее будет работать.
Yandex
Объявления
16.09.2012, 18:47     Функция, перемножающая два числа с учётом переполнения
Ответ Создать тему
Опции темы

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