Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Вот что получил в итоге. Но этот код плохой. Плохая работа с памятью, как минимум Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 08:02 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
up и down - состояние (сетевых) интерфейсов, а не положение чисел в дробях. Ну или направления движения Кроме того, хотя могу и ошибаться, но требуются очень веские причины, чтобы выделять целые в куче. Внутри функции - мне даже в голову ничего не приходит. С числителем - да, опечатался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 08:10 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Перепишем дробь в таком виде: Код: sql 1. 2. 3. Можно не перемножать числа в диапазоне от min(m, n-m) до max(m, n-m), включительно. Но, учитывая высокую скорость рост факториала, надо взять (асимптотическую) аналитическую формулу и считать (натуральный) логарифм числа сочетаний. И потенцировать по мере надобности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 08:20 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov Кроме того, хотя могу и ошибаться, но требуются очень веские причины, чтобы выделять целые в куче. Внутри функции - мне даже в голову ничего не приходит не очень понял, объясните пожалуйста. PS Доводы по поводу up и down принимаю и буду иметь в виду. Спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 08:26 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. тут немного изменил. но проблема не в этом, а в том как я работаю с res. в la_multiplication происходи malloc, и потом память не освобождается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 08:35 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovв диапазоне от min(m, n-m) до max(m, n-m), включительноНижняя исключительно, верхняя - включительно, т.е. от (min(n, n-m) + 1) до max(n, n-m). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:13 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryне очень понял, объясните пожалуйстаЕсть регистры, статическая память, стек и куча. Первых двух касаться не будем. Запись: Код: sql 1. даёт нам переменную для указателя на стеке и отдельно, со своими накладными расходами, область памяти для хранения целого в куче. Возникает вопрос - зачем? Чтобы израсходовать лишнюю память на хранение, процессорные такты на выделение и косвенную адресацию, а потом ещё решать проблему утечек? Почему нельзя делать просто: Код: sql 1. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:21 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovBasil A. Sidorovв диапазоне от min(m, n-m) до max(m, n-m), включительноНижняя исключительно, верхняя - включительно, т.е. от (min(n, n-m) + 1) до max(n, n-m). понял вас ) В моей программе это исправляется одной строчкой Код: plaintext 1. 2. 3. 4. SSBasil A. Sidorov Кроме того, хотя могу и ошибаться, но требуются очень веские причины, чтобы выделять целые в куче. Внутри функции - мне даже в голову ничего не приходит не очень понял, объясните пожалуйста. PS Доводы по поводу up и down принимаю и буду иметь в виду. Спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:23 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovSashaMercuryне очень понял, объясните пожалуйстаЕсть регистры, статическая память, стек и куча. Первых двух касаться не будем. Запись: Код: sql 1. даёт нам переменную для указателя на стеке и отдельно, со своими накладными расходами, область памяти для хранения целого в куче. Возникает вопрос - зачем? Чтобы израсходовать лишнюю память на хранение, процессорные такты на выделение и косвенную адресацию, а потом ещё решать проблему утечек? Почему нельзя делать просто: Код: sql 1. ? а как я массивы буду хранить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:26 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryа как я массивы буду хранить ?Как-то так: Код: sql 1. P.S. Я бы посмотрел на уже имеющиеся пакеты длинной арифметики прежде, чем начать изобретать собственный велосипед. Чтобы не делать треугольных колёс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:31 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСделал умножение, алгоритм мне не нравится, ибо мне кажется что он далеко не оптимален. Тут код С++, потому что мне сложно отказаться от тернарного оператора. Он мне слишком нравится, чтобы его не использовать Саш... ну слов нет. Мне кажется чтение стандартов тебе только вредит. Каша у тебя в голове. Пиши весь код на С++. Делай file extension на как с++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:34 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Сочетания в один проход не работают. Пример . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:36 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonSashaMercuryСделал умножение, алгоритм мне не нравится, ибо мне кажется что он далеко не оптимален. Тут код С++, потому что мне сложно отказаться от тернарного оператора. Он мне слишком нравится, чтобы его не использовать Саш... ну слов нет. Мне кажется чтение стандартов тебе только вредит. Каша у тебя в голове. Пиши весь код на С++. Делай file extension на как с++. почему каша ?( мне просто очень нравится этот оператор :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:37 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercurymaytonпропущено... Саш... ну слов нет. Мне кажется чтение стандартов тебе только вредит. Каша у тебя в голове. Пиши весь код на С++. Делай file extension на как с++. почему каша ?( мне просто очень нравится этот оператор :( Тернарный оператор был изначально в "C". Это замечание к твоей фразе о выборе С или С++. (я надеюсь третьего варианта здесь нет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:46 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonSashaMercuryпропущено... почему каша ?( мне просто очень нравится этот оператор :( Тернарный оператор был изначально в "C". Это замечание к твоей фразе о выборе С или С++. (я надеюсь третьего варианта здесь нет). В Си тернарный оператор используется только для присваивания, а не для того, как я люблю его использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:52 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Вот ещё скриншот ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 09:55 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. тут немного изменил. но проблема не в этом, а в том как я работаю с res. в la_multiplication происхомди malloc, и потом память не освобождается. Атомарные типы на стеке удаляются автоматом при выходе из функции. Например если ты написал функцию int sum(int x,int y) которая просто складывает два числа и возвращает резалт - то ты имеешь замечательную возможность использовать рекуррентные формы такие как: Код: plaintext 1. Код: plaintext 1. То-же самое для char* это сделать сложно т.к. мы теряем результата второго каллбэка sum(..) и он утекает вникуда до тех пор пока ОС не завершит процесс. Вобщем получаем мемори лик. Это дефект или артефакт "C"-like декларации функции которая должна ВЕРНУТЬ строку. И ему уже 100 лет в обед. Здесь сам Бог или Страуструп велит использовать С++/STD с шаблонами строк или чисел. Опять же странно что ты здесь не использовал возможности С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 10:00 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury, по поводу присваивания - ОК. Убедил. Но не злоупотребляй синтаксисом. Знавал я перцев которые тело цикла for переносили в выражение for. Код работал но при этом был аццки нечитабелен. Были красавцы которые любят ВЛОЖЕННЫЙ тернарный оператор или пытаются КАЖДЫЙ if в коде разложить в тернарность. Где-то получается. Где-то нет. Разумеется читать код - невозможно. Хочется руки оторвать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 10:04 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonТо-же самое для char* это сделать сложно т.к. мы теряем результата второго каллбэка sum(..) и он утекает вникуда до тех пор пока ОС не завершит процесс. Вобщем получаем мемори лик. Это дефект или артефакт "C"-like декларации функции которая должна ВЕРНУТЬ строку. И ему уже 100 лет в обед. Здесь сам Бог или Страуструп велит использовать С++/STD с шаблонами строк или чисел. Опять же странно что ты здесь не использовал возможности С++. создам реплику той функции, которая будет освобождать память для аргументов перед выходом. Не использовал возможности, потому что не знаю их. maytonSashaMercury, по поводу присваивания - ОК. Убедил C: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 10:08 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryА вот сейчас делаю сочетания, может быть кто-нибудь подскажет как обосновать что этот алгоритм будет работать за один проход ? Либо обратное ? По поводу расчёта сочетаний. Алгоритм не смотрел пока. Ничего не скажу. Для опровержения его нужно тестить. Для доказательства - х.з. Можно взять канонический и через эквивалентные преобразования доказать равенство. Но впрочем в процессе преобразований можно наломать боков. Так что... путь долгий. По поводу прямой формулы. Она редко используется для больших чисел. В числителе и знаменателе - аццки огромные числа хотя впрочем частное не такое великое. Разумеется математи середины 20 века не имели технически возможности посчитать большой факториал. ПОэтому обычно берут приближённый расчёт через Пуассончик. Интеграл Пуассона. Он даёт вполне приемлемую точность. Поскольку Пуассончик - неберущийся то обычно используют его табличное задание. А в софте - интеграл методом прямоугольников. Если функция С(m,n) будет стоять под оптимизацией то можно использовать Треугольник Паскаля как кеш или частичную мемоизацию. Суть в том что если вы раньше расчитали С(m-1,n), C(m,n-1) то С(m,n) можно получить просто сложением от ранее расчитанного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 10:17 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНе использовал возможности, потому что не знаю их. Да што там. Подключ std::string и используй их как хранилище целых чисел вместо char *. Заодно и утечки уйдут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 10:20 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonПодключ std::string и используй их как хранилище целых чиселБолее логичным выглядит vector<int> или как его там. Это, опять-таки, если изобретать велосипед. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 10:23 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Не... ему символы блихе IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 10:25 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Марк, мне нужно точное значение. За один проход не сработает. Нужно думать как делать иначе. Проще всего взять готовую реализацию, готовую библиотеку и использовать её. Если я когда-нибудь буду работать программистом С++, то вероятно буду делать так. Но мне нравится программировать, и нравится думать, потому я буду делать это так, как начал делать. Без использования того, что уже реализовано, и не смотря на то, как где-то сделано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2014, 10:27 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38818087&tid=2019209]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 146ms |

| 0 / 0 |
