|
0 / 0 / 0
Регистрация: 03.05.2010
Сообщений: 46
|
|
Как увеличить максимальный размер массива?03.05.2010, 01:02. Показов 13942. Ответов 88
Метки нет (Все метки)
Вопрос. Как увеличить максимальный размер массива? Команда типа DIM Y(16383) еще понимается
в QB, ,более уже никак, а мне надо хотя бы DIM Y(300000). Числа в массиве только натуральные, массив только одномерный. Строю скатерть Улама. Большую хочу! Еще. Как картинку, нарисованную в QB напечатать или сохранить в JPG, например? Из ДОСа не получается.. Спасибо.
0
|
|
| 03.05.2010, 01:02 | |
|
Ответы с готовыми решениями:
88
Увеличить размер массива, оставив нетронутыми исходные элементы
Как динамически увеличить размер массива? |
|
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
|
||||||
| 16.05.2010, 19:47 | ||||||
|
Эксперимент показал что наибольшее замедление вносит эта строка
Перебор массива выполняетя довольно быстро.
0
|
||||||
|
0 / 0 / 0
Регистрация: 03.05.2010
Сообщений: 46
|
|
| 17.05.2010, 00:15 [ТС] | |
|
Потрясно, все летает, все получилось! Огромное спасибо!!! Раздвину окно пошире , увижу побольше..
DRB.f = N / X(i) - Int(N / X(i)) - тут на деление"/", видимо, куча времени уходит? Но без него никак, делить то надо. Пусть так и останется. Ну, можно не делить дважды, а ввести еще переменную и пользовать ее, тогда деление будет одноразовое.
0
|
|
|
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
|
|||||||||||||||||||
| 17.05.2010, 00:26 | |||||||||||||||||||
|
Основные тормоза не из-за деления, а из за функции Int, округляющей дробные числа. Деление выполняет процессор за пару тактов. Это ведь не интерпретатор.
Ну и подправить строку
0
|
|||||||||||||||||||
|
0 / 0 / 0
Регистрация: 03.05.2010
Сообщений: 46
|
|
| 17.05.2010, 00:58 [ТС] | |
|
30000 рисуется за 63сек. Все подправил, все получилось, окно раздвинулось. Разве Int так долго выполняется? Это же просто отбросить все, что после запятой. Это не за один такт разве делается?
0
|
|
|
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
|
||
| 17.05.2010, 01:04 | ||
|
Вообще, работа с дробными числами, требует больше времени чем с целыми.
1
|
||
|
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
|
|
| 17.05.2010, 14:32 | |
|
Скомпилировал программу в FreeBasic в режиме совместимости в QB.
Думал быстрее работать будет, но нет, скорсть постоения 34 секунды, что на 9 секунд больше чем в PureBasic.
0
|
|
|
Кормпилятор
|
||
| 18.05.2010, 05:49 | ||
|
Для этого пишется программа, которая занимает много тактов. Если работает без сопроцессора(целочисленная арифметика) то всё делается инструкциями процессора - это экстремально быстро если юзаем только регистры. Если сопроцессор, что наиболее вероятно, то при переводе в целое число фиксированного типа(8, 16, 32 бита) нужно проверить границы, очевидно жрёт много времени.
1
|
||
|
0 / 0 / 0
Регистрация: 03.05.2010
Сообщений: 46
|
|
| 19.05.2010, 00:12 [ТС] | |
|
Да , согласен, пожалуй что так оно и есть. СОвсем забыл Ассемблер..
0
|
|
|
0 / 0 / 0
Регистрация: 03.05.2010
Сообщений: 46
|
|
| 21.05.2010, 00:39 [ТС] | |
|
наблюдаю дальние зоны Улама. Интересно, что то новое открывается, хотя и не очень красивое. Чем больше скатерть, тем больше убеждаюсь в крайней медлительности вычислительных средств.. Двухъядерный годовалый пентюк ненамного лучше 8-милетнего пентюка. Нужна машина на пару-тройку порядков производительней.)) И монитор HD тоже маловат. Конкретно маловат. Странно, нонешнее крутое железо весьма слабо удовлетворяет древним задачам.
0
|
|
|
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
|
|||
| 21.05.2010, 11:59 | |||
|
Дело в том, что эта прога будет работать с одинаковой скоростью как на одноядернике, так и на 8-ми ядернике. Здесь намного важнее тактовая частота, а не количество ядер, т. к. по сути, используется всего одно ядро! Чтобы использовать все ядра процессора в программе, задачу нужно разпараллелить и выполнять в нескольких потоках, но при текущем алгоритме, это невозможно сделать, т. к. результат следующего расчёта зависит от всех предыдущих расчётов. В первую очередь модифицировыать строку DRB.f = N / X(i) - Int(N / X(i)) Нужно избавится от функции Int и по возможности, от работы с дробными числами. Тогда программа будет выполнятся намного быстрее.
0
|
|||
|
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
|
||||||
| 21.05.2010, 15:33 | ||||||
|
Изменил формулу нахождения простых чисел, теперь она такая DRB = N % X(i)
Она определяет остаток от деления, типа DRB = MOD(N, X(i)) В QB Скатерть с размерами 600х600 строится за 7 секунд, а с размерами 800х800 за 20 секунд. Размер окна и количество точек, задаётся в первых трёх строках программы
0
|
||||||
|
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
|
|||||||||||
| 21.05.2010, 17:35 | |||||||||||
|
Всё таки ассемблер творит чудеса!
Это
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 03.05.2010
Сообщений: 46
|
|
| 21.05.2010, 23:51 [ТС] | |
|
У меня 835МГц. Другой комп ок.2,5ГГц. Как это избавиться от дробных чисел? Именно это и нужно делать при обнаружении всех делителей очередного кандидата на простое число.
0
|
|
|
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
|
|||
| 22.05.2010, 00:51 | |||
![]() Для этого не обязатель использовать округление и дробные числа, т. е. DRB.f = N / X(i) - Int(N / X(i)) Достаточно выполнить целочисленое деление и узнать остаток от деления (целое число), т .е . DRB = N % X(i) Первая и вторая строка, выдаёт нам одинаковый результат, но вторая строка выполняется в несколько раз быстрее, а значит прога будет работать быстрее. Запусти и сам убедишся - результат тот же, но скорость построения скатерти в 8 раз больше! ![]() Добавлено через 4 минуты Я тестировал проги на компе с двухядерным процем Celeron 1.6 ГГц. Результаты выше.
1
|
|||
|
0 / 0 / 0
Регистрация: 03.05.2010
Сообщений: 46
|
|
| 22.05.2010, 14:04 [ТС] | |
|
Класс! Но твой DRB = N % X(i) дает ускорение лишь в 2 раза по сравнению с моим DRB.f = N / X(i) - Int(N / X(i)) . Кстати, не совсем понимаю, как читается эта команда N % X(i) (извини, синтаксис так и не выучил, и диалект тем более). З.Ы. на ассемблере пока не пробовал.
0
|
|
|
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
|
|
| 22.05.2010, 14:54 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 03.05.2010
Сообщений: 46
|
|
| 24.05.2010, 00:59 [ТС] | |
|
C Ассемблерной вставкой быстрее в 2,5 раза. Поле 1000х1000 CountPoint=72000 рисует за 182 сек на
компе 835МГц.
0
|
|
|
0 / 0 / 0
Регистрация: 03.05.2010
Сообщений: 46
|
|
| 26.05.2010, 22:39 [ТС] | |
|
На Intel Core Duo 2.2ГГц 2,0Гб ОЗУ W=1280 H=1024 J0=2048 I0=512 DIM(1009000) скатерть строится 1443 сек, но видно только кусок ее 1280х1024, т.е. первый миллион простых чисел.
0
|
|
|
Кормпилятор
|
||
| 27.05.2010, 00:59 | ||
|
Круто,PB, слушай а можешь пояснить что делает команда CDQ, я просто под DOS'ом программил на голом асме, щас переучиваюсь(точнее пытаюсь ибо обновременно осваиваю ещё Blitz3D с AutoCad'ом). Как я понимаю Pure Basic допускает асмовые вставочки? Хотелось бы узнать как это делается, ибо заинтригован.
0
|
||
|
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
|
|||||
| 27.05.2010, 10:54 | |||||
|
Это немного доработаный результат компиляции PureBasic. ASM код сгенерил он, я лишь избавился от постояного обращения к переменным в памяти, путём использования регистров процессора и за счёт этого, получил прибавку в скорости.
0
|
|||||
| 27.05.2010, 10:54 | |
|
Помогаю со студенческими работами здесь
80
Как увеличить размер дин. массива средствами С++ Необходимо увеличить максимальный размер памяти программы до 5 Гигов Как увеличить размер массива до заданной длины заданным значением?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
|
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|