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

QBasic

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
АББА
133 / 60 / 7
Регистрация: 08.11.2012
Сообщений: 250
#1

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

28.01.2013, 00:46. Просмотров 1859. Ответов 25
Метки нет (Все метки)

Надо найти следующее:
9^999999+9^999999
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2013, 00:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возведение в степень (QBasic):

Длинная арифметика. Возведение в степень - QBasic
даны N и M (N,M >100;N,M <999 ) вычислить по формуле: s=n^m+m^n Добавлено через 1 минуту но только чтобы показала весь ответ

возвести в степень - Basic
ДАНО: n - целое число, x-действительное число. ВЫЧИСЛИТЬ, не используя операцию возведения в степень ^

Возвести число в степень - QBasic
Помогите с задачками на циклы. Дано вещественное число A и целое число N(>0). Вывести A в степени N:AN=A*A*...*A (числа A...

Возвести число в степень - QBasic
плиз, прошу помощи в реализации проги, никак не могу придумать алгоритм перевода в СС. Задача такая: возвести число в степень...

Вычислить н-ый степень корня численным методом - QBasic
ВСЕМ ПРИВЕТ:) ПОМОГИТЕ НАЙТИ ОШИБКУ. нужно вычислить н-ый степень корня численным методом, вот моя программа, она выдает ошибку syntax...

Возвести все отрицательные элементы матрицы в третью степень - QBasic
Дана матрица (или 2хмерный массив, точно уже не помню) 3 на 3 . Все отрицательные числа возвести в 3ю степень. Из полученных значений...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
m-ch
5200 / 747 / 197
Регистрация: 25.02.2011
Сообщений: 1,025
Записей в блоге: 1
19.01.2016, 04:09 #16
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Похоже чуда не произошло, и мой процессор реально хуже чем i7. Скомпилировал этот же код в режиме консоли на FB build 1.00, вот итог - 475 секунд против 128 на VB6.
Не уверен, что мой i7 намного лучше.
Запустил Ваш файл скомпилированный на VB6 на своем компьютере, время выполнения - 126 секунд
Ваш файл, скомпилированный в FreeBasic - 396 секунд

При этом я пользовался компилятором FreBasic-1.04-0-win64
Для сравнения скомпилировал под win32 и win64:
FreBasic-1.04-0-win32 - 398 секунд
FreBasic-1.04-0-win64 - 220 секунд
Все настройки компиляторов по умолчанию, никаких изменений в код программы не вносилось (изменение типов и т.п.)

exe файлы во вложении
0
Вложения
Тип файла: zip stp32-64.zip (38.5 Кб, 0 просмотров)
m-ch
5200 / 747 / 197
Регистрация: 25.02.2011
Сообщений: 1,025
Записей в блоге: 1
19.01.2016, 06:28 #17
на VBA (Excel) данный код выполняется у меня 20 минут.

Исходя из результатов данного теста, может быть пока и не буду переезжать на FreeBasic.
Есть проекты, которые требуют много вычислительных ресурсов, хотел их перенести из VBA в более быструю среду, оказывается, что VB6 не так уж и плох, тем более, что на VB (VBA) писать и отлаживать код мне намного легче.

Не по теме:

Вопрос к специалистам, на сколько легко реализуется многопоточность в FreeBasic?

0
Pro_grammer
Модератор
5933 / 2094 / 401
Регистрация: 24.04.2011
Сообщений: 3,569
Записей в блоге: 10
19.01.2016, 10:09 #18
Цитата Сообщение от Pro_grammer Посмотреть сообщение
на FB build 1.00, вот итог - 475 секунд
Для полной ясности тот же код перенёс на PureBasic.
Время выполнения 457 с. В принципе, так же как и у FreeBasic.
Как так то, почему же VB6 в 3 раза оказался быстрее в голых вычислениях?
Или вернее, почему так плохо оптимизированы трансляторы-компиляторы в FB и PB?
0
Вложения
Тип файла: zip stepenPB.zip (5.7 Кб, 8 просмотров)
The trick
Модератор
7193 / 2425 / 741
Регистрация: 22.02.2013
Сообщений: 3,476
Записей в блоге: 74
19.01.2016, 10:51 #19
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Как так то, почему же VB6 в 3 раза оказался быстрее в голых вычислениях?
Потому что вб активно использует регистры и меньше обращается к памяти.
1
m-ch
5200 / 747 / 197
Регистрация: 25.02.2011
Сообщений: 1,025
Записей в блоге: 1
19.01.2016, 21:46 #20
Поэкспериментировал с типом данных в FB, изменил алгоритм вычисления
фактически вычисляется не 2*9^3*(9^4)^249999 как было реализовано первоначально, а 2*(9^9)^111111
Использовал тип данных ULongInt для хранения длинного числа
Для чистоты эксперимента подсчет времени выполнения сделал без учета записи на диск:
Кликните здесь для просмотра всего текста
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
DIM AS ULongInt a(120000), b, c, m
DIM AS LONG i, j, l, n
DIM AS SINGLE t1, t2
    
n = 111111
m = 9 ^ 9
a(0) = 2
t1 = TIMER
FOR i = 1 TO n
    j = -1
    WHILE j < l OR c > 0
        j = j + 1
        b = a(j) * m + c
        a(j) = b MOD 1000000000
        c = b \ 1000000000
    WEND
    l = j
NEXT
t2 = TIMER
OPEN "Output.txt" FOR OUTPUT AS #1
PRINT #1,a(l) & "";
FOR i = 1 TO l
    PRINT #1,RIGHT$("000000000" & a(l - i), 9);
NEXT
CLOSE
PRINT t2 - t1
SLEEP

Время выполнения сильно зависит, каким компилятором создан файл (x32 или x64)
x64 - 38 секунд
x32 - 178 секунд
Что удивило, что под 32 разрядную систему расчет выполняется более чем в 4 раза медленнее
0
Вложения
Тип файла: zip stpFB2.zip (20.8 Кб, 4 просмотров)
m-ch
5200 / 747 / 197
Регистрация: 25.02.2011
Сообщений: 1,025
Записей в блоге: 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)
0
The trick
Модератор
7193 / 2425 / 741
Регистрация: 22.02.2013
Сообщений: 3,476
Записей в блоге: 74
19.01.2016, 22:46 #22
Цитата Сообщение от m-ch Посмотреть сообщение
x32 - 178 секунд
На VB6 - 72 секунды.
К сожалению на VB6 нельзя писать 64-разрядные приложения, но можно заюзать 64-битную ассемблерную вставку.
0
locm
2011 / 768 / 74
Регистрация: 28.10.2011
Сообщений: 2,247
Записей в блоге: 2
19.01.2016, 22:56 #23
Цитата Сообщение от The trick Посмотреть сообщение
На VB6 - 72 секунды.
Разве в VB6 есть тип переменной, целый 8-ми байтный?
0
The trick
Модератор
7193 / 2425 / 741
Регистрация: 22.02.2013
Сообщений: 3,476
Записей в блоге: 74
19.01.2016, 23:05 #24
Цитата Сообщение от locm Посмотреть сообщение
Разве в VB6 есть тип переменной, целый 8-ми байтный?
Там есть Currency, который является 64 битным целым деленным на 10000.
1
bedvit
210 / 80 / 11
Регистрация: 20.05.2016
Сообщений: 340
Записей в блоге: 3
28.07.2016, 21:58 #25
Решается за время меньше секунды, если подключить LongNum_Excel.
2
bedvit
210 / 80 / 11
Регистрация: 20.05.2016
Сообщений: 340
Записей в блоге: 3
11.01.2017, 12:58 #26
Писал в другой теме на нашем форуме, но решение сделал и для этой темы
Вот решение в Excel (VBA) с библиотекой LongNum_Excel.
Вычисление для двух примеров (7^7 и 9^999999+9^999999) итог:
Время вычисления (секунд) = 0,078125
Время вывода/заполнения ячеек (секунд) = 6,847656
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2017, 12:58
Привет! Вот еще темы с ответами:

Все отрицательные числа матрицы возвести в третью степень - QBasic
Все отрицательные числа возвести в третью степень. Из полученных значений сформировать одномерный массив.

Как возвести в квадрат отрицательные числа и в третью степень положительные - QBasic
Народ кто знает помогите. Дали задачи в технаре ... не могу решить. Аш инересно стало. Если не трудно конечно же вот первая. На ветвление...

Возвести в квадрат те числа, значения которых неотрицательны, и в четвертую степень — отрицательные - QBasic
1. Даны три действительных числа. Возвести в квадрат те из них, значения которых неотрицательны, и в четвертую степень — отрицательные. ...

Все отрицательные числа возвести в третью степень. Из полученных значений сформировать одномерный массив - QBasic
Все отрицательные числа возвести в третью степень. Из полученных значений сформировать одномерный массив. желательно чтобы ввод чисел...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.01.2017, 12:58
Ответ Создать тему
Опции темы

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