А мне как-то все равно, я не в том возрасте, умный услышит, глупый не поймет, хоть и «в принципе неплохой людЪ». Тем более на Хабре в основном подростки и я просто тупо хочу донести до них информацию.
Файл Вы открыли тот, какой поменьше?
Код не мой, его один немец набирал, беря из моего, и чисто для отладки. Он любит отступ 4, а я в два пробела. Точнее ему было лень перенастраивать редактор. Он и дал название, поскольку этот пакет рассчитан на вычисления с динамическими структурами и на вычисления, которые длятся неделями утечки памяти очень важны, а у него была машина с 128 гигов примерно в 2004 году и было интересно это проверить.
Я как-то писал на Хабре про «сборку мусора» на C++, потом удалил из-за срача людей, которым прочитали лекции по азам программирования и они потом возомнили себя специалистами.
Утро. Тестостерона много, решил померится яйцами, если они конечно есть у присутствующих.
Я по молодости писал на Lisp, точнее на SLisp и RLisp (у него есть даже поддержка ООП).
У меня есть модуль в стандартной поставки Reduce.
Потом на C++ с Qt2, Qt3, если нужно GUI. Например у меня имеется эффективная реализация длинной арифметике на C++. В 1998 делала стандартный GMP 1.2
С 2005 полюбил Python (третий не нравится), PyQt4 (сейчас PySide).
Я например решил задачу сменно-суточного планирования для РЖД (до меня 30 лет ее 13 ВЦ по дороге не могли решить).
В 2001 решил задачу составления расписания
http://www.interface.ru/home.asp?artId=29844
http://www.norcom.ru/habrahabr/post/148232
Итого: не смотря мои коды, Вы просто тупо льете воду. Я знаю примерно за 40 языков
Вот ссылка на мою документацию по моей старой программе (больше 1000 страниц).
http://invo.jinr.ru/ginv/developer_ru/index.html
А перфокарты отлично служат пепельницами (я правда никогда не курил), тарелками и т.д.
За слово товарищ спасибо.
Ребята посмотрите исходники!
А пусть Андрей2008 думает как и что сравнить!
Все в пределах правил. Там работает полиморфизм, а возвращение const УКАЗАТЕЛЯ для const класса их программы это вообще взрыв мозга.
Пока.
Я же Вам про это и писал. Вы что, C++ незнаете. Просмотрите пред историю,
что и откуда получается.
Статика это бред при сложной логике.
Про троллей что кликали, за свои слова надо отвечать. Кнопку-то нажать легко, а где мозг?
Ваш статический стиль не имеет никакого отношения к профессиональному программированию.
Проверьте меня
http://invo.jinr.ru/ginv/index.html
исходники, доки и руководство на русском и чужом английском присутствуют.
Не менялось примерно с 2007, и это не гордость, это просто.
Просто люблю профи.
Когда-то, примерно в 1998 году у меня была реализация длинной арифметики на C++. По скорости она в 2-3 раза делала на тот момент GMP. Сейчас я пользуюсь GMP и не заморачиваюсь с ассемблером под конкретный процессор.
И так, идея реализации с минимальным использованием ассемблера. Цифра везде машинное слово, а типы C++ зависят от конкретной архитектуры. Кстати для организации всяких сдвигов нужно знать где расположен значащий бит в начале или в конце машинного слова
struct LongInt {
int mAlloc; \\ размер выделенной памяти
int mSize; \\ abs(mSize) текущий размер числа и sign(mSize) его знак
unsigned int* mLimb; \\ массив цифр
};
unsgned int a, b;
если a+b < a, то произошло переполнение и единичку должны перенести, a+b при этом правильный результат для младшей цифры
если a-b > a, то произошло переполнение и единичку должны занять, a-b при этом правильный результат для младшей цифры
Ассемблер нужен для двузначного умножения и деления. Поскольку с 60-х архитектура большинства процессоров поддерживала создание длинной арифметики (вспомните хотя бы lisp)
при перемножении двух цифр возникает двузначное число, т.е. два машинных слова, просто в обычных языках старшая часть откидывается или выдается переполнение если она не равна нулю
при делении задается две цифры делимого и цифра делителя, в результате цифра частного и цифра остатка
Как выглядит все на разных ассемблерах можно посмотреть в gmplib.org в исходниках в папке mpn. В ней mpn\generic без ассемблера.
1. Статья содержит реализацию, значит нужно было вместо основания выбрать не 10 или 100, а 2^k.
И к выбирается обычно таким, чтобы 2^k умещалось в точности в машинное слово.
2. Нужно было привести другие формулы разложения чисел для перемножения для A=A_1 + 2^k A_2, B=B_1 + 2^k B_2
Ваше
A B= A_1 B_1 + 2^k ((A_1 + A_2)(B_1 + B_2) — (A_1 B_1 + A_2 B_2)) + 2^(2k) A_2 B_2
Используется в gmplib.org
A B= A_1 B_1 — 2^k ((A_1 — A_2)(B_1 — B_2) — (A_1 B_1 + A_2 B_2)) + 2^(2k) A_2 B_2
Еще умножение можно заменить возведением в квадрат с той же сложностью.
3. Метод Карацубы начинает выигрывать у обычного умножения на современных компьютерах при размере чисел равных 8 машинным словам. Но это зависит от реализации и конкретного компа.
4. Если разбивать число сразу на r — частей (метод умножения Toom–Cook), то сложность можно довести до O(n^(1+eps)).
5. Самый быстрый метод умножения Шёнхаге — Штрассена основанный на быстром преобразование Фурье имеет сложность O(n log(n) log(log(n))). Фактически его асимптотическая сложность совпадает со сложением и вычитанием.
6. Деление можно заменить умножением на обратный (его для точной арифметики получают алгоритмом основанным на методе Ньютона для приближенного решения нелинейных уравнений) и тогда асимптотическая сложность деления равна сложности умножения.
SciPy + Cython для повышения производительности. Быстрая и качественная разработка+легкая оптимизация без сильного переписывания кода. PySide для интерфейса. Если Вы считаете. что лучше использовать монстры Matlab и .NET., то это Ваши проблемы.
И главное, если у вас проблема с плавающий точкой, не забывайте, что арифметические операции +, * коммутативны, но не ассоциативны. В этом весь корень проблем.
Автор не написал самое главное. Но это не его вина. Практически все про это не пишут.
Самое сложное и нетривиальное (в отличие от самого алгоритма) это правильно выбрать генетический код.
1. Генетический код не обязан представлять решение задачи. Из него достаточно просто (относительно объема вычислений) должно строится решение и желательно, но не обязательно, однозначно.
2. Кроссовер на генетическом коде должен должен давать решение близкое, в смысле требуемого экстремума, к решениям построенным для его родителей.
В качестве примера избитая задача коммивояжера. Те, кто выбирают в качестве кода порядок обхода городов глубоко не правы, поскольку такой генетический код не удовлетворяет 2 пункту ни в коем разе.
PS. Я рад, что «другие» меня не понимают и я думаю для меня это счастье. Просто, когда человек (homo sapiens) думает он потребляет от 20% до 50% всей энергии тела 2% от массы тела. Если у Вас затылок не потеет, Вам повезло!
PS1. Свет это энергия!
PS2. Я не знаю, что такое «ПС», расшифруйте пожалуйста!
Все это конечно хорошо и выполнена просто огромная работа, но тут есть подводные камни.
1. Кто профессионально работает с системами компьютерной алгебры, в основной массе, очень не любят навороченный и чрезмерно перегруженный интерфейс.
2. Здесь каких-то только систем нет. Значит надо делать для каждой свою документацию по пользованию. Там одно оглавление будет на несколько сотен страниц, да и поиск будет давать на конкретный вопрос опять несколько сотен ссылок. В результате, проще залезть в документацию первоначального продукта, например в GSL (GNU Scientific Library), и по ней все сделать. Я на конференции задавал одному из (восторженных) разработчиков этот вопрос, но вразумительного ответа не получил.
Сам, поскольку мне нравится Python, пытался пользоваться лет 7 назад, даже студентам на практике задачи давал на Sage, но мне кажется проще считать на wxMaxima, SymPy и SciPy, чем пользовать этого монстра. Вдобавок написать на Python конвертер из одного формата данных в другой для своей конкретной задачи достаточно просто и работать он будет на специализированных данных гораздо быстрее.
Я всем знакомым домой ставлю Linux. Он у них живет, в плену иллюзий практически десятилетиями, что можно все и никто мне не морочит мне голову. что можно или нельзя открыть, все кодеки поют и играют фильмы, а максимум пользователь может только удалить свои личные файлы. Пароль помню только я. Они сразу теряют с ним бумажку или его забывают.
А так, создали проблему на ровном месте. Моей программой по составлению расписаний в вузах многие пользуются, исходники потеряны под XP в 2001. Почта их не отправляет, выкладка на сайт не помогает, google и yandex диск не принимает, только через dropbox пока получается.
Резюме. Если не можем решить основную проблему, то давайте искать пуговицу от пиджака и при этом желающих помочь (особенно за деньги) будет великое множество.
Maple система неплохая, правда, как перешли на новый интерфейс я в адрес разработчиков слышал много добрых слов. В целях экономии, говорят, нанимают писать программы студентов и это может хорошо для студентов, но качество продукта страдает.
А так, это можно было проделать и wxMaxima. Она бесплатна, написана на Lisp (значит намного быстрее систем компьютерной алгебры написанных на C, вот такой парадокс) и имеет приятный интерфейс. Сейчас переживает второе рождение.
Файл Вы открыли тот, какой поменьше?
Код не мой, его один немец набирал, беря из моего, и чисто для отладки. Он любит отступ 4, а я в два пробела. Точнее ему было лень перенастраивать редактор. Он и дал название, поскольку этот пакет рассчитан на вычисления с динамическими структурами и на вычисления, которые длятся неделями утечки памяти очень важны, а у него была машина с 128 гигов примерно в 2004 году и было интересно это проверить.
Я как-то писал на Хабре про «сборку мусора» на C++, потом удалил из-за срача людей, которым прочитали лекции по азам программирования и они потом возомнили себя специалистами.
Я по молодости писал на Lisp, точнее на SLisp и RLisp (у него есть даже поддержка ООП).
У меня есть модуль в стандартной поставки Reduce.
Потом на C++ с Qt2, Qt3, если нужно GUI. Например у меня имеется эффективная реализация длинной арифметике на C++. В 1998 делала стандартный GMP 1.2
С 2005 полюбил Python (третий не нравится), PyQt4 (сейчас PySide).
Я например решил задачу сменно-суточного планирования для РЖД (до меня 30 лет ее 13 ВЦ по дороге не могли решить).
В 2001 решил задачу составления расписания
http://www.interface.ru/home.asp?artId=29844
http://www.norcom.ru/habrahabr/post/148232
Итого: не смотря мои коды, Вы просто тупо льете воду. Я знаю примерно за 40 языков
Вот ссылка на мою документацию по моей старой программе (больше 1000 страниц).
http://invo.jinr.ru/ginv/developer_ru/index.html
А перфокарты отлично служат пепельницами (я правда никогда не курил), тарелками и т.д.
За слово товарищ спасибо.
Или у них нет шансов, как у и председателя центробанка. Но мы, чисто теоретически можем их простить? Или нет ТОВАРИЩ Иосиф Виссарионович?
Еще раз если Вы профи? отвечайте профессионально? Сколько «правилЪных» программ Ви напЫсали?
До завтра.
Я за свою жизнь перечитал сотни тысяч чужого кода, иль больше, главное можно этой библиотекой пользоваться ли нет.
Язык, стиль или принцип программирования для меня не имеет значения. А как для статического анализа?
А пусть Андрей2008 думает как и что сравнить!
Все в пределах правил. Там работает полиморфизм, а возвращение const УКАЗАТЕЛЯ для const класса их программы это вообще взрыв мозга.
Пока.
что и откуда получается.
Статика это бред при сложной логике.
Про троллей что кликали, за свои слова надо отвечать. Кнопку-то нажать легко, а где мозг?
Проверьте меня
http://invo.jinr.ru/ginv/index.html
исходники, доки и руководство на русском и чужом английском присутствуют.
Не менялось примерно с 2007, и это не гордость, это просто.
Просто люблю профи.
И так, идея реализации с минимальным использованием ассемблера. Цифра везде машинное слово, а типы C++ зависят от конкретной архитектуры. Кстати для организации всяких сдвигов нужно знать где расположен значащий бит в начале или в конце машинного слова
struct LongInt {
int mAlloc; \\ размер выделенной памяти
int mSize; \\ abs(mSize) текущий размер числа и sign(mSize) его знак
unsigned int* mLimb; \\ массив цифр
};
unsgned int a, b;
если a+b < a, то произошло переполнение и единичку должны перенести, a+b при этом правильный результат для младшей цифры
если a-b > a, то произошло переполнение и единичку должны занять, a-b при этом правильный результат для младшей цифры
Ассемблер нужен для двузначного умножения и деления. Поскольку с 60-х архитектура большинства процессоров поддерживала создание длинной арифметики (вспомните хотя бы lisp)
при перемножении двух цифр возникает двузначное число, т.е. два машинных слова, просто в обычных языках старшая часть откидывается или выдается переполнение если она не равна нулю
при делении задается две цифры делимого и цифра делителя, в результате цифра частного и цифра остатка
Как выглядит все на разных ассемблерах можно посмотреть в gmplib.org в исходниках в папке mpn. В ней mpn\generic без ассемблера.
И к выбирается обычно таким, чтобы 2^k умещалось в точности в машинное слово.
2. Нужно было привести другие формулы разложения чисел для перемножения для A=A_1 + 2^k A_2, B=B_1 + 2^k B_2
Ваше
A B= A_1 B_1 + 2^k ((A_1 + A_2)(B_1 + B_2) — (A_1 B_1 + A_2 B_2)) + 2^(2k) A_2 B_2
Используется в gmplib.org
A B= A_1 B_1 — 2^k ((A_1 — A_2)(B_1 — B_2) — (A_1 B_1 + A_2 B_2)) + 2^(2k) A_2 B_2
Еще умножение можно заменить возведением в квадрат с той же сложностью.
3. Метод Карацубы начинает выигрывать у обычного умножения на современных компьютерах при размере чисел равных 8 машинным словам. Но это зависит от реализации и конкретного компа.
4. Если разбивать число сразу на r — частей (метод умножения Toom–Cook), то сложность можно довести до O(n^(1+eps)).
5. Самый быстрый метод умножения Шёнхаге — Штрассена основанный на быстром преобразование Фурье имеет сложность O(n log(n) log(log(n))). Фактически его асимптотическая сложность совпадает со сложением и вычитанием.
6. Деление можно заменить умножением на обратный (его для точной арифметики получают алгоритмом основанным на методе Ньютона для приближенного решения нелинейных уравнений) и тогда асимптотическая сложность деления равна сложности умножения.
И главное, если у вас проблема с плавающий точкой, не забывайте, что арифметические операции +, * коммутативны, но не ассоциативны. В этом весь корень проблем.
Самое сложное и нетривиальное (в отличие от самого алгоритма) это правильно выбрать генетический код.
1. Генетический код не обязан представлять решение задачи. Из него достаточно просто (относительно объема вычислений) должно строится решение и желательно, но не обязательно, однозначно.
2. Кроссовер на генетическом коде должен должен давать решение близкое, в смысле требуемого экстремума, к решениям построенным для его родителей.
В качестве примера избитая задача коммивояжера. Те, кто выбирают в качестве кода порядок обхода городов глубоко не правы, поскольку такой генетический код не удовлетворяет 2 пункту ни в коем разе.
Я лично никого, и себя в частности не повторяю.
Пусть плохо, русский не родной, но зато моЁ.
Вашим друзьям привет!
PS1. Свет это энергия!
PS2. Я не знаю, что такое «ПС», расшифруйте пожалуйста!
Как, там, в преферансе, молокосос он и в Африке молокосос.
Вдобавок, как в Африке, все время без света!
1. Кто профессионально работает с системами компьютерной алгебры, в основной массе, очень не любят навороченный и чрезмерно перегруженный интерфейс.
2. Здесь каких-то только систем нет. Значит надо делать для каждой свою документацию по пользованию. Там одно оглавление будет на несколько сотен страниц, да и поиск будет давать на конкретный вопрос опять несколько сотен ссылок. В результате, проще залезть в документацию первоначального продукта, например в GSL (GNU Scientific Library), и по ней все сделать. Я на конференции задавал одному из (восторженных) разработчиков этот вопрос, но вразумительного ответа не получил.
Сам, поскольку мне нравится Python, пытался пользоваться лет 7 назад, даже студентам на практике задачи давал на Sage, но мне кажется проще считать на wxMaxima, SymPy и SciPy, чем пользовать этого монстра. Вдобавок написать на Python конвертер из одного формата данных в другой для своей конкретной задачи достаточно просто и работать он будет на специализированных данных гораздо быстрее.
А так, Ваша мечта, мне нравится.
Я не ленивый и в Ваш зашел, их у Вас в 7 раз больше и типичный флуд.
А так, создали проблему на ровном месте. Моей программой по составлению расписаний в вузах многие пользуются, исходники потеряны под XP в 2001. Почта их не отправляет, выкладка на сайт не помогает, google и yandex диск не принимает, только через dropbox пока получается.
Резюме. Если не можем решить основную проблему, то давайте искать пуговицу от пиджака и при этом желающих помочь (особенно за деньги) будет великое множество.
А так, это можно было проделать и wxMaxima. Она бесплатна, написана на Lisp (значит намного быстрее систем компьютерной алгебры написанных на C, вот такой парадокс) и имеет приятный интерфейс. Сейчас переживает второе рождение.