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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
АББА
 Аватар для АББА
130 / 60 / 7
Регистрация: 08.11.2012
Сообщений: 250
28.01.2013, 00:46     Возведение в степень #1
Надо найти следующее:
9^999999+9^999999
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2013, 00:46     Возведение в степень
Посмотрите здесь:

QBasic Возвести все отрицательные элементы матрицы в третью степень
Все отрицательные числа возвести в третью степень. Из полученных значений сформировать одномерный массив QBasic
Возвести число в степень QBasic
Возвести в квадрат те числа, значения которых неотрицательны, и в четвертую степень — отрицательные QBasic
Все отрицательные числа матрицы возвести в третью степень QBasic
Возведение в степень Pascal ABC
QBasic Длинная арифметика. Возведение в степень
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
m-ch
5089 / 668 / 166
Регистрация: 25.02.2011
Сообщений: 919
Записей в блоге: 1
19.01.2016, 22:25     Возведение в степень #21
Еще одна реализация длинной арифметики в FB, реально производится вычисление 2*9^999999 без математического упрощения, реализовано бинарное возведение в степень
Кликните здесь для просмотра всего текста
QBasic/QuickBASIC
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
Private CONST MaxL AS LONG = 120000 'максимальное кол-во элементов в массиве
Private CONST mBase AS ULongInt = 1000000000 'система счисления в массиве
Private CONST lBase AS LONG = 9 'кол-во цифр в каждом элементе массива
 
SUB lMultArr(a() AS ULongInt, ByRef al AS LONG, b() AS ULongInt, bl AS LONG)
   DIM AS LONG i, j, k, cl
   DIM AS ULongInt cr, c()
   REDIM c(0 TO MaxL) AS ULongInt
 
   FOR i = 0 TO al
      FOR j = 0 TO bl
        cr = a(i) * b(j)
            k = i + j
            WHILE cr > 0
            cr = cr + c(k)
            c(k) = cr MOD mBase
            cr = cr \ mBase
            k = k + 1
            WEND
            IF k - 1 > cl THEN cl = k - 1
      NEXT
   NEXT
   FOR i = 0 TO cl
        a(i) = c(i)
   NEXT
   al = cl
END SUB
 
DIM AS ULongInt n(), p()
DIM AS LONG nl, pl, m, i
DIM AS SINGLE t1, t2 
REDIM n(0 TO MaxL) AS ULongInt, p(0 TO MaxL) AS ULongInt
 
n(0) = 9
p(0) = 2
m = 999999
    
t1 = TIMER
DO
    IF m MOD 2 THEN lMultArr(p(), pl, n(), nl)
    m = m \ 2
    IF m > 0 THEN lMultArr(n(), nl, n(), nl) ELSE EXIT DO
LOOP
t2 = TIMER
 
OPEN "output.txt" FOR OUTPUT AS #1
PRINT #1, p(pl) & "";
FOR i = pl - 1 TO 0 STEP -1
    PRINT #1, RIGHT$(STRING$(lBase, "0") & p(i), lBase);
NEXT i
CLOSE
PRINT t2 - t1
SLEEP

Время выполнения - 89 секунд (x64)
По сравнению с С++ - существенно быстрее (если верить softmob)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
The trick
Модератор
 Аватар для The trick
6890 / 2354 / 736
Регистрация: 22.02.2013
Сообщений: 3,417
Записей в блоге: 74
19.01.2016, 22:46     Возведение в степень #22
Цитата Сообщение от m-ch Посмотреть сообщение
x32 - 178 секунд
На VB6 - 72 секунды.
К сожалению на VB6 нельзя писать 64-разрядные приложения, но можно заюзать 64-битную ассемблерную вставку.
locm
1931 / 686 / 65
Регистрация: 28.10.2011
Сообщений: 2,031
Записей в блоге: 2
19.01.2016, 22:56     Возведение в степень #23
Цитата Сообщение от The trick Посмотреть сообщение
На VB6 - 72 секунды.
Разве в VB6 есть тип переменной, целый 8-ми байтный?
The trick
Модератор
 Аватар для The trick
6890 / 2354 / 736
Регистрация: 22.02.2013
Сообщений: 3,417
Записей в блоге: 74
19.01.2016, 23:05     Возведение в степень #24
Цитата Сообщение от locm Посмотреть сообщение
Разве в VB6 есть тип переменной, целый 8-ми байтный?
Там есть Currency, который является 64 битным целым деленным на 10000.
bedvit
145 / 15 / 3
Регистрация: 20.05.2016
Сообщений: 122
Записей в блоге: 1
28.07.2016, 21:58     Возведение в степень #25
Решается за время меньше секунды, если подключить LongNum_Excel.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2017, 12:58     Возведение в степень
Еще ссылки по теме:

Как возвести в квадрат отрицательные числа и в третью степень положительные QBasic
Возвести число в степень QBasic
QBasic Вычислить н-ый степень корня численным методом
Не пользуясь операцией возведение в степень возвести число а в степень n Turbo Pascal
Бинарное возведение в степень числа типа BigInteger в степень Biginteger C#

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

Или воспользуйтесь поиском по форуму:
bedvit
145 / 15 / 3
Регистрация: 20.05.2016
Сообщений: 122
Записей в блоге: 1
11.01.2017, 12:58     Возведение в степень #26
Писал в другой теме на нашем форуме, но решение сделал и для этой темы
Вот решение в Excel (VBA) с библиотекой LongNum_Excel.
Вычисление для двух примеров (7^7 и 9^999999+9^999999) итог:
Время вычисления (секунд) = 0,078125
Время вывода/заполнения ячеек (секунд) = 6,847656
Yandex
Объявления
11.01.2017, 12:58     Возведение в степень
Ответ Создать тему
Опции темы

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