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

Возведение в степень - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.65
v0l0d1ka
9 / 9 / 0
Регистрация: 14.12.2010
Сообщений: 127
09.10.2011, 01:28     Возведение в степень #1
Подскажите, как написать программу возведения 2-ки в миллионную степень и вывести результат на экран.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <math.h>
#include <cstdlib>
 
 
int main ()
{
  printf ("7 ^ 3 = %lf\n", pow (7.0,3.0));
  printf ("4.73 ^ 12 = %lf\n", pow (4.73,12.0));
  printf ("32.01 ^ 1.54 = %lf\n", pow (32.01,1.54));
  printf ("2 ^ 1000000.0 = %lf\n", pow (2.0,1000000.0));
  system("pause");
  return 0;
}
Не работает.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2011, 01:28     Возведение в степень
Посмотрите здесь:

C++ Возведение в степень!
возведение в степень C++
C++ Возведение степень
C++ Возведение в степень
Возведение в степень C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
09.10.2011, 14:28     Возведение в степень #21
Цитата Сообщение от aeshes Посмотреть сообщение
Просто было подозрение, что помимо быстрого возведения в степень можно как-то оптимизировать способ хранения большого числа именно для этой задачи, где 2 в основании
я вижу только один способ, это массив чаров или с двуразрядными, или с одноразрядными числами (не решил пока) и переносы на триггерах (скорее D) и счетчиках, и операции преимущественно бинарные. картину "в общем" вижу. в ближайшее время сяду за реализацию.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.10.2011, 14:34     Возведение в степень #22
Цитата Сообщение от alkagolik Посмотреть сообщение
это массив чаров или с двуразрядными, или с одноразрядными числами
Можно спокойно по 9 цифр в одном элементе массива хранить.
Или по 17-18, если ассемблерные вставки использовать =\ Как - не знаю, не пробовал.
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 14:40     Возведение в степень #23
Цитата Сообщение от alkagolik Посмотреть сообщение
я вижу только один способ, это массив чаров или...
Мне кажется, что массив чаров даст оптимизацию в используемой памяти для хранения. Но количество операций над массивом будет такое же, что и над массивом целых. Хотя могу и ошибаться
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
09.10.2011, 14:41     Возведение в степень #24
А зачем здесь вообще алгоритмы
http://www.cyberforum.ru/cgi-bin/latex.cgi?2^n = 10...0, где после 1 стоит n нулей
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 14:43     Возведение в степень #25
Thinker, ну это да, я еще в самом начале написала, что это так. А если нужен десятичный вид, а не двоичный?

О, еще где-то видела реализацию больших чисел как массива unsigned long. Когда твое число превосходит максимально допустимое в данном типе, у тебя в след элемент массива записывается это переполнение, а пред элемент обнуляется
Короче, проблема, я так понимаю, в реализации мат операций над большим числом в конкретном представлении
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
09.10.2011, 14:43     Возведение в степень #26
Thinker, ты с http://www.cyberforum.ru/cgi-bin/latex.cgi?10^n не путаешь, случаем?
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
09.10.2011, 14:47     Возведение в степень #27
Цитата Сообщение от Nameless One Посмотреть сообщение
Thinker, ты с http://www.cyberforum.ru/cgi-bin/latex.cgi?10^n не путаешь, случаем?
Неа, это двоичный формат!
Nameless One
09.10.2011, 14:57
  #28

Не по теме:

а, ну тогда все ок

demik991
 Аватар для demik991
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 15
26.12.2011, 08:20     Возведение в степень #29
вот мой псевдо двуядерний, 2 гига оперативки ( и пока ище криворукость в написании кода на С ) потребовал на раздумия 5 с половиной минут и таки вывел результат (думал не дождусь). При етих результатах уверен что можна оптимизировать и достичь куда лудших результатов.

Добавлено через 5 минут
Цитата Сообщение от alkagolik Посмотреть сообщение
вы представляете себе агрегат, который в состоянии вычислить
у меня такой имееться, канечно не напрямую, а так как я думал и так как здесь описывалось через масив

Добавлено через 59 минут
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
int p[35000],n,i,j,h,t;
 
for(int k = 0; k<35000; k++)
p[k]=0;
 
t=0;
h=0;
p[0]=1;
 
cout<< "Enter power of 2: ";
cin>>n;
 
if (n==0) p[0]=1;
else
{
   for(i=0; i<n; i++)
   for(j=0; j <= h; j++)
   {
 
       p[j]*=2;
       if (t>0) {p[j]+=t; t=0;}
       if(p[j]/1000000000>0)
       {
            t=p[j]/1000000000;
            p[j]=p[j]%1000000000;
            if(p[j+1]<=0)    h++;
        }
   }
}
вот мое детище, но зато как на меня тут просматриваеться алгоритм действий
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
26.12.2011, 15:27     Возведение в степень #30
Цитата Сообщение от Nameless One Посмотреть сообщение
real* * 0m0.271s
Таки С быстрее.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
diagon@shadeware:~$ cat test.cpp
#include <stdio.h>
#include <gmp.h>
 
int main()
{
    FILE *out = fopen("output.txt", "w");
    
    mpz_t a;
    mpz_init(a);
    mpz_ui_pow_ui(a, 2, 1000000);
    mpz_out_str(out, 10, a);
}
diagon@shadeware:~$ gcc test.cpp -lgmp -O3 && time ./a.out
 
real    0m0.109s
user    0m0.104s
sys 0m0.000s
Т.е. за 0.1 секунду считает.
Причем почти все время уходит на вывод в файл, если вывод закомментить, то прога будет выполняться 0.001 секунду.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2011, 01:41     Возведение в степень
Еще ссылки по теме:

C++ Возведение в степень
C++ возведение в степень

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

Или воспользуйтесь поиском по форуму:
demik991
 Аватар для demik991
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 15
28.12.2011, 01:41     Возведение в степень #31
очень интересно, у меня если забрать вывод в консоль то програма выполняеться не 5м30сек, а 5м20сек.
надо попробовати с индийским самому, а не с библиотекой, будеть.
а вот вопросец где оно держит промежуточный результат. до 2^30 понятно, а вот 2^512 например
Yandex
Объявления
28.12.2011, 01:41     Возведение в степень
Ответ Создать тему
Опции темы

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