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

Быстро возвести в квадрат число заданной длины (<16 байт) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ почему не добавляет элемент? http://www.cyberforum.ru/cpp-beginners/thread886965.html
insert() должен добавить один элемент,но он неправильно работает,где ошибка? #include "stdafx.h" #include <iostream> using namespace std; void Insert(const int index,const int value,int * arr,const int size); int _tmain(int argc, _TCHAR* argv) { int * arr=new int; for(int i=0;i<10;i++)
C++ Запись и чтение с файла Здравствуйте,помогите пожалуйста ..есть две структуры, но каждая записывается и считывается с разных файлов, не посоветует как можно объединить,чтоб все записывалось и считывалось в один файл? void List::outFilesamolet(char * path) { FILE *out; if ((out = fopen(path,"wb")) == NULL) { cout << "Файл " << path << "не может быть открыт!" << endl; return; } struct samoletTemp {... http://www.cyberforum.ru/cpp-beginners/thread886947.html
Структуры (cведения об абонентах АТС: ФИО владельца телефона, год установки телефона, номер телефона, тип установки телефона, льгота) C++
Сведения об абонентах АТС. Структура должна содержать следующую информацию: фамилию, имя, отчество владельца телефона, год установки телефона, номер телефона, тип установки телефона (спаренный или нет), льготу (процентную скидку при оплате). # include <stdio.h> # include <conio.h> # include <iostream.h> const LEN = 40,LEN3=120; struct atc {char fam ,ima,otch;
C++ Упростить задачу (Таблица футбольного чемпионата задана квадратной матрицей - определить номера команд, прошедших чемпионат без поражений)
помогите пожалуйста с с++ здесь дана задача и весь код от нее но мне нужно только б) кому не сложно выделите именно нужное Таблица футбольного чемпионата задана квадратной матрицей порядка n, в которой все элементы, принадлежащие главной диагонали, равны нулю, а каждый элемент, не принадлежащий главной диагонали, равен 2, 1 или 0 (числу очков, набранных в игре: 2 — выигрыш, 1 — ничья, 0...
C++ Как глобальную переменную засунуть в структуру? http://www.cyberforum.ru/cpp-beginners/thread886913.html
#include<stdio.h> #include<malloc.h> #include<string.h> typedef struct Item { char *info; struct Item *next; }Item;
C++ Найти пару точек расстояние между которыми максимально(Исправить программу ) В трехмерном пространстве заданы координаты n точек составить программу определяющую пару точек расстояние между которыми максимально Сама программа есть но нужно ее изменить под dev-c++ и сделать как можно проше (чтобы можно было ее объяснить ) #include <cmath> #include <cstdlib> #include <ctime> #include <iomanip> #include <iostream> struct Point { double x, y, z; подробнее

Показать сообщение отдельно
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
02.06.2013, 16:02  [ТС]     Быстро возвести в квадрат число заданной длины (<16 байт)
Можешь затестить, какая быстрее работает?
Кликните здесь для просмотра всего текста
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <iostream>
#include <ctime>
 
typedef unsigned int int32;
typedef unsigned long long int64;
 
const int SQUARE_CUTOFF = 1 + (1 << 4);
 
const int mask = 1 << 31;
 
void mult (const int32* number1, const int32* number2, const int length1, const int length2, int32* product);
void sqr (const int32* number, const int length, int32* square);
 
int main ()
{
    const int size = 64;
    const int iter = 100000;
    clock_t time;
 
    int32 a[size] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,
                     0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,
                     0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,
                     0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,
                     0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,
                     0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,
                     0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,
                     0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF};
    int32 b[size] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,
                     0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,
                     0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,
                     0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,
                     0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,
                     0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,
                     0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,
                     0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF, 0xFAFFFFFF, 0xFFFFFFFF};
    int32 c[size << 1], d[size * 3 + 1];
 
    time = clock ();
 
    for (int i = 0; i < iter; ++i)
        mult (a, b, size, size, c);
 
    time = clock () - time;
 
    std::cout << "Simple multiplication:\t\t" << (double) time / iter;
 
    time = clock ();
 
    for (int i = 0; i < iter; ++i)
        sqr (a, size, d);
 
    std::cout << std::endl;
 
    time = clock () - time;
 
    std::cout << "Modified multiplication:\t" << (double) time / iter;
 
    for (int i = 0; i < (size << 1); ++i)
        if (c[i] != d[i])
            std::cerr << "ERROR!";
 
    std::cin.get ();
 
    return 0;
}
 
 
void mult (const int32* number1, const int32* number2, const int length1, const int length2, int32* product)
{
    memset (product, 0, (length1 + length2) * sizeof (int32));
 
    int64 currentSum;
    int32 carry = 0;
 
    for (int i = 0; i < length2; ++i)
    {
        carry = 0;
 
        for (int j = 0; j < length1; ++j)
        {
            currentSum = (int64) number1[j] * number2[i] + product[i + j] + carry;
            product[i + j] = (int32) currentSum;
            carry = currentSum >> 32;
        }
 
        product[i + length1] += carry;
    }
}
 
void sqr (const int32* multiplier, const int length, int32* square)
{
    if (length < SQUARE_CUTOFF)
    {
        mult (multiplier, multiplier, length, length, square);
 
        return;
    }
 
    int64 current_sum, carry = 0;
 
    const int32* multiplierLow = &multiplier[0];
    const int32* multiplierHigh = &multiplier[length >> 1];
 
    int32* productLow = &square[0];
    int32* productHigh = &square[length];
    int32* productMid = &square[length << 1];
 
    sqr (multiplierLow, length >> 1, productLow);
    sqr (multiplierHigh, length >> 1, productHigh);
    mult (multiplierLow, multiplierHigh, length >> 1, length >> 1, productMid);
 
    square[length + (length >> 1)] += productMid[length - 1] >> 31;
 
    for (int i = length - 1; i > 0; --i)
    {
        productMid[i] <<= 1;
 
        if (productMid[i - 1] >> 31)
            ++productMid[i];
    }
 
    productMid[0] <<= 1;
 
    for (int i = 0; i < length; ++i)
    {
        current_sum = (int64) square[i + (length >> 1)] + productMid[i] + carry;
        square[i + (length >> 1)] = current_sum;
        carry = current_sum >> 32;
    }
 
    square[length + (length >> 1)] += carry;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru