Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ускорение выполнения вычислений c++

454 455454 Знаток (384), закрыт 1 год назад
очень долго выполняются вычисления (>30с. Дальше не ждал). Это относится только к очень большим числам (квинтиллион, например). Как это можно исправить? Нужно просто вычесть из а b. (единственная проблема в том, что эти вычисления находятся в цикле while, а в нём в if
Лучший ответ
YT_VolkOFF Искусственный Интеллект (140068) 1 год назад
Для ускорения вычислений в C++ можно использовать различные методы оптимизации, такие как:

– Использование алгоритмов, оптимизированных для работы с большими числами. Например, алгоритм быстрого возведения в степень (fast exponentiation algorithm) может быть использован для быстрого умножения двух больших чисел.
– Использование многопоточности (multi-threading) для параллельной обработки данных. Это может значительно увеличить производительность при работе с большими объемами данных.
– Оптимизация кода с помощью инструментов автоматической оптимизации, таких как GCC или Clang. Эти инструменты могут оптимизировать код и уменьшить время выполнения программы.

В вашем случае, возможно, стоит попробовать использовать многопоточность для ускорения вычислений. Для этого можно создать несколько потоков, каждый из которых будет выполнять свою часть вычислений. Также можно использовать алгоритмы, оптимизированные для работы с большими числами, чтобы ускорить процесс умножения.
454 455454Знаток (384) 1 год назад
спасибо большое за информацию!
YT_VolkOFF Искусственный Интеллект (140068) 454 455454, Рад помочь! Мне не сложно, Вам полезно.
Остальные ответы
kaiu Высший разум (120010) 1 год назад
с 18 знаками вычитание по сути такое же быстрое, как и с 9 знаками, ну может раза 2-4 хуже.
Проблема где-то в другом или чисел много или код у вас такой.
454 455454Знаток (384) 1 год назад
я вот тоже думал на код, но с маленькими же числами работает корректно, а с большими...

попробую чуть иначе описать проблему: например, я ввожу 100000000000000000 и 2. В данном случае программа переходит к циклу, а в нём к if. Моё предположение: слишком огромное число, чтобы из него постоянно вычитать 2 (конкретно в этом примере). Я попробовал с числом из 10 символов и программа выполнилась корректно (конечно, чуть дольше, но всё же выполнилась за... ну... 0.7-0.9с допустим).

если я прав, то такое вычитание ускорить никак не получится, верно?
kaiu Высший разум (120010) 454 455454, постоянно вычитать всегда долго. Когда мы пишем 12300 - 1000 то не берем 12300 палочки, 1000 палочек и выкидываем из каждой кучи по одной. Это очень долго, мы просто знаем, что есть 12.3 тысяч надо вычесть просто 1 тысячу. Так и так, никто не вычитает по 2, только если вы не что-то хотите найти :) Если простые числа, то конечно это всегда долго, на то они так и сложно ищутся. А если вам надо вычесть 123 раз по 2, то вычесть надо 123*2=246 а при этом отдельно вычитаются единицы, десятки, сотни...но не тупо по 1 единице вы бежите цикл на 246. Так что надо видеть код, понимать для чего он, тогда ясно будет.
Полосатый жираф Алик Искусственный Интеллект (313131) 1 год назад
Выполни в своём тексте вычитание:
100000000000000000 - 2. Один раз. И посмотри на результат.
Возможно, что у тебя ничего не вычитается!

Кстати, а какие числа ты используешь? Целые, длинные целые, с плавающей, длинные с плавающей?!
454 455454Знаток (384) 1 год назад
проверил на более высоком числе вместо 2 (10 знаков) и всё сработало.

целые маленькие числа (например, 12 и 5) и большие целые (проблема с большой разницей в них. Большое целое - маленькое целое).

Вопрос можно сказать закрыт, т.к. код (как я понял) не сможет сделать эту операцию вычитания из огромного числа маленькое. Спасибо за помощь)
Полосатый жираф Алик Искусственный Интеллект (313131) 454 455454, Пожалуйста. Читай тему: "Представление чисел в ЭВМ". К примеру: в Excel числа представлены не более, чем в 15 десятичных разрядах. Попытаешься указать больше цифр в ячейке с числом - остальные хвостовые цифры будут НУЛЯМИ. Что бы ты не пытался вводить. Ограничение разрядной сетки!!!
Похожие вопросы