- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
Matrix Matrix::inverse ()
{
Matrix Temp;
Matrix A;
Matrix AL(4,4);
int c1,c2;
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
{
c1 = 0;
for (int k = 0; k < 5; k++)
{
if (k == i) continue;
c2 = 0;
for (int l = 0; l < 5; l++)
{
if (l == j) continue;
AL[c1][c2] = array[k][l];
c2++;
}
c1++;
}
A[i][j] = pow(-1,static_cast<double>(i + j + 2))*AL.determinant();
}
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
{
Temp[i][j] = 1/determinant()*A[i][j];
}
return Temp;
}
ctm 11.11.2011 06:43 # +2
1. размеры A, Temp полагаю лучше инициализировать сразу.
2. необходимость создания матрицы меньшего размера вопрос спорный - ну и черт с ней.
3. pow(-1,static_cast<double>(i + j + 2)) - а подумать?
4. строка 38. 1/determinant() внутри цикла. офигенно.
5. в дополнение - тогда и Temp не понадобится.
TarasB 11.11.2011 09:09 # 0
Правда, есть шанс, что вызов детерминанта компилятор закеширует.
absolut 11.11.2011 10:47 # +2
с какой радости?
TarasB 11.11.2011 11:30 # 0
AnimeGovno-_- 11.11.2011 11:31 # +1
roman-kashitsyn 11.11.2011 11:37 # +3
lucidfoxGovno 11.11.2011 12:02 # −1
roman-kashitsyn 11.11.2011 12:31 # 0
lucidfoxGovno 11.11.2011 12:42 # −2
roman-kashitsyn 11.11.2011 12:50 # +4
lucidfoxGovno 11.11.2011 13:03 # −3
Всего лишь не верное утверждение. Признак чистоты функции не в константности возвращаемого значения, если посмотреть на функцию постом выше.
lucidfoxGovno 11.11.2011 13:09 # −2
roman-kashitsyn 11.11.2011 14:42 # +3
lucidfoxGovno 11.11.2011 15:07 # −3
>DirtyFffuuu.
>Dirty
Надеюсь языки знаете.
roman-kashitsyn 11.11.2011 15:11 # +3
lucidfoxGovno 11.11.2011 15:31 # −3
>Это необходимое, но не достаточное условие.
>Это необходимое
Оно не необходимое. И оно не достаточное.
Функция может быть как чистой, так и не чистой, но при это возвращает константу: Константа - понятие относительное, как видишь из этого примера. Слову "константа" места в определении чистой функции нет. Ты не знаешь определение чистой функции, по всему видно.
roman-kashitsyn 11.11.2011 15:37 # +3
> Оно не необходимое
ты, похоже, не в ладах с математикой, говно.
lucidfoxGovno 11.11.2011 15:49 # −5
Пруф?
> Оно не необходимое
Раз эта функция может быть как чистой, так и грязной, и не возвращает константу. => Это не необходимое правило для чистых функций.
Ты только в своем последнем посте наконец понял, что константа - это свойство, в данном случае, возвращенной переменной, а не функции. Именно поэтому слово константа не может участвовать в определении чистой функции.
>в данном контексте (функция без параметров, возвращающая число)
>возвращающая число
Ну если у тебя функция ещё и только числа возвращает, но не может другие типы, то почему ты мне это подсовывал как определение чистой функции без параметров?
roman-kashitsyn 11.11.2011 15:55 # +4
Ну ты и еблан... Это как раз означает, что условие не является достаточным.
> что константа - это свойство, в данном случае, возвращенной переменной, а не функции
Ты сам то понял, что сморозил?
> Ну если у тебя функция ещё и только числа возвращает
Да, блядь, determinant() возвращает число, ты не знал?
> подсовывал как определение
Где ты увидел определение?
> только числа возвращает
Чистая функция без параметров может с тем же успехом возвращать списки фиксированной структуры, ну ты понял
> ну ты понял
кого я обманываю....
lucidfoxGovno 11.11.2011 16:25 # −5
А казался уравновешенным и серьёзным человеком. Я был о тебе более высокого мнения. Ты меня разочаровал.
>Это как раз означает, что условие не является достаточным.
Или ты не уловил суть или ничего не смыслишь в "необходимом и достаточном условии".
Пусть CR - утверждение, что мы возвращаем константу. Пусть CF - утверждение, что функция чистая.
Ты сказал:
>функция без аргументов чиста ТОГДА, когда она возвращает константу. Это необходимое, но не достаточное условие.
Необходимое условие означает:
!CR -> !CF.
Опровергаю твоё утверждение !CR -> !CF.:
int DirtyFffuuu(void) - константу не возвращает, то есть !CR, но при этом она чистая: CF. То есть !CR !-> CF. Но по твоему утверждению !CR -> !CF. Как видишь противоречие на лицо, ну если ты хоть немного знаешь математику.
>Ты сам то понял, что сморозил?
Ну а ты не понял. Я это понял. Ну ты понел.
>Где ты увидел определение?
Согласен, не определение, но это достаточное условие. А оно, как видишь. Не верно.
>Чистая функция без параметров может с тем же успехом возвращать списки фиксированной структуры, ну ты понял
КО? И константную структуру, да. И что? Ты хотел поразить меня своими императивными знаниями?
roman-kashitsyn 11.11.2011 16:37 # +2
я такой и есть, ты просто доставляешь мне лулзы
> int DirtyFffuuu(void) - константу не возвращает, то есть !CR, но при этом она чистая
> Dirty
> она чистая
По-моему, ты обосрался, и всячески стараешься это скрыть за умными словами.
lucidfoxGovno 11.11.2011 16:53 # −4
> она чистая
Согласен. Не верно назвал. Хорошо переименую:
int CleanFffuuu(void) - константу не возвращает, то есть !CR, но при этом она чистая: CF.
Так стало понятнее? Не важно как функция названа. Главное - какая она на самом деле. Если ты после переименования все ещё не выезжаешь простую логику, то могу повторить простое "математическое" доказательство ещё раз.
roman-kashitsyn 11.11.2011 16:58 # +3
3.14159265 11.11.2011 17:25 # +3
Неважно кто тебя посылает нахуй. Главное - что ты пидарасина считаешь разведение унылой дисскусии ни о чем "успешным троллингом", а в реале я вижу тебя как терпеливого хуесоса, несущего ахинею и рефрешащего говнокод в ожидании что кто-нибудь да ответит на твой бред...
roman-kashitsyn 11.11.2011 16:16 # +3
> Надеюсь языки знаете.
К твоему сведению, обезьяна, clean - это сортиры драить, для чистых функций используется слово PURE.
lucidfoxGovno 11.11.2011 16:29 # −7
roman-kashitsyn 11.11.2011 13:16 # +4
сосни хуйца, неуч
lucidfoxGovno 11.11.2011 13:21 # −2
greno 11.11.2011 15:18 # 0
lucidfoxGovno 11.11.2011 15:38 # −9
greno 11.11.2011 15:51 # 0
bugmenot 11.11.2011 15:42 # +2
только детерминистская функция так себя ведет
TarasB 11.11.2011 12:52 # 0
roman-kashitsyn 11.11.2011 13:53 # +1
TarasB 11.11.2011 14:54 # +1
В функциях, не меняющих состояние класса (то есть с атрибутом const&) можно заменять на константы обращения к функциям с тем же атрибутом, если вся грязь этих функцию лежит в обращениях к классу (т.е. функции локально чисты).
roman-kashitsyn 11.11.2011 15:04 # 0
TarasB 11.11.2011 15:07 # 0
Не может, если сделать критическую секцию.
greno 11.11.2011 15:20 # 0
TarasB 11.11.2011 15:24 # 0
roman-kashitsyn 11.11.2011 15:25 # 0
TarasB 11.11.2011 15:31 # 0
A := B.ChangeCell(i, j, NewValue)
и дальше B нигде не используется, и внутри метода ChangeCell первой же строкой написано Result:=*This, то можно сразу писать B на место A.
Но опять же, в многопоточной программе эта оптимизация нарушит логику, то есть надо думать, как бы эту оптимизацию подружить с потоками.
greno 11.11.2011 15:58 # +2
В печень ему!^W^W^W В данном алгоритме все равно матрицу меняем, можно сразу копировать и в чужую область видимости не открываться.
lucidfoxGovno 11.11.2011 15:11 # −1
Ты всеж погугли expression elimination и пойми, когда применима эта оптимизация, а когда нет. Нечего голословно что-то утверждать.
lucidfoxGovno 11.11.2011 15:32 # −2
Ну если не умеешь программировать, то да.
3.14159265 11.11.2011 17:19 # +3
roman-kashitsyn 11.11.2011 17:25 # 0
ctm 11.11.2011 11:39 # 0
TarasB 11.11.2011 11:50 # 0
ССЗБ
Это из серии, что оптимизация лишнего вызова конструктора-деструктора может изменить логику программы.
Так вот, если из-за этого меняется логика, то пейсатель конструктора ошибся.
roman-kashitsyn 11.11.2011 12:56 # 0
lucidfoxGovno 11.11.2011 13:08 # 0
roman-kashitsyn 11.11.2011 13:11 # +2
"Все проблемы от незнания мат части." (c)
lucidfoxGovno 11.11.2011 13:20 # −3
Материальная точка либо движется, либо нет. Третьего не дано.
Но всегда можно взять другую систему отсчета, где движущаяся точка стоит.
"Все проблемы от незнания мат части." (c)
roman-kashitsyn 11.11.2011 13:25 # +1
lucidfoxGovno 11.11.2011 13:32 # −2
Может с твоим мозгом - да.
>когда следующая функция не будет чистой?
Она чиста всегда.
roman-kashitsyn 11.11.2011 13:35 # 0
lucidfoxGovno 11.11.2011 13:44 # 0
greno 11.11.2011 15:26 # +2
TarasB 11.11.2011 15:32 # +3
defecate-plusplus 11.11.2011 15:48 # +2
не надо полагаться на то, что компилятор умнее тебя, будет что то там кешировать и ты со всем этим охуенно взлетишь
написал ему "тут должна вызываться функция", рассчитывай, что тупой компилятор тут вызовет функцию
а то привыкли, понимаешь
3.14159265 11.11.2011 17:12 # +2
Расскажи нам лучше ПОЛИМОРФИЗМ В ФИЗИКЕ!
>Материальная точка либо движется, либо нет. Третьего не дано.
>Но всегда можно взять другую систему отсчета, где движущаяся точка стоит.
Как бы ты с помощью портала выебал себя в жопу? Или не стоит?
roman-kashitsyn 11.11.2011 13:31 # +1
lucidfoxGovno 11.11.2011 13:51 # 0
roman-kashitsyn 11.11.2011 13:55 # +1
lucidfoxGovno 11.11.2011 14:26 # −1
TarasB 11.11.2011 14:57 # +1
roman-kashitsyn 11.11.2011 16:20 # +2
Вот это: чистая функция?
SmackMyBitchUp 11.11.2011 19:16 # 0
roman-kashitsyn 11.11.2011 19:40 # 0
3.14159265 11.11.2011 20:47 # +3
Но стопудово скоро он прожует то говно, которым его накормили и вернется.
Соскучится же за привычным вкусом во рту.
SmackMyBitchUp 11.11.2011 21:55 # +2
Черный Властелин 11.11.2011 07:08 # 0
defecate-plusplus 11.11.2011 08:01 # 0
правда, однопоточное
absolut 11.11.2011 10:47 # +3
TarasB 11.11.2011 11:30 # +3
AnimeGovno-_- 11.11.2011 11:32 # 0
defecate-plusplus 11.11.2011 11:52 # +2
поэтому зла не держу
lucidfoxGovno 11.11.2011 11:59 # −2
defecate-plusplus 11.11.2011 12:04 # +4
ты столько раз фейлился в школьных задачах, что твое мнение о профессиональном программировании даже со спортивной точки зрения никому не интересно
lucidfoxGovno 11.11.2011 12:05 # −3
defecate-plusplus 11.11.2011 12:10 # +3
http://govnokod.ru/8426#comment117910
час дня, почему не в школе? природоведение закончилось раньше?
lucidfoxGovno 11.11.2011 12:12 # −3
defecate-plusplus 11.11.2011 12:14 # +3
lucidfoxGovno 11.11.2011 12:16 # −1
d_dev 11.11.2011 13:13 # −1
defecate-plusplus 11.11.2011 13:25 # +1
lucidfoxGovno 11.11.2011 13:30 # −1
d_dev 11.11.2011 13:39 # 0
defecate-plusplus 11.11.2011 13:46 # 0
по беглому обзору апи в rtl она скорее похожа на стандартную библиотеку старичка Си
и да, буст кому то может и сторонний, а для кого то такой же стандартный, потому что используется в 100% С++ проектов на работе
d_dev 11.11.2011 13:53 # 0
правдивость какого-либо утверждения обратно пропорциональна удаленности утверждающего от обьекта обсуждения
lucidfoxGovno 11.11.2011 13:56 # −1
roman-kashitsyn 11.11.2011 13:59 # +2
lucidfoxGovno 11.11.2011 14:28 # 0
defecate-plusplus 11.11.2011 13:57 # +1
есть ли во "вменяемой" библиотеке для дельфей то, что используется в работе каждый день - хотя бы контейнеры, обеспечивающие ожидаемую эффективность под конкретную задачу?
d_dev 11.11.2011 13:55 # 0
defecate-plusplus 11.11.2011 14:23 # +3
интересует контейнер со сложностью доступа к i элементу за O(1)
контейнер с сложностью вставки в начало, конец и середину за O(1)
контейнер с сложностью поиска элемента по своему ключу в контейнере за O(logN) или лучше и, при этом, сложностью вставки лучше O(N)
алгоритмы сортировки, поиска по этим контейнерам
единообразие работы с ними
d_dev 11.11.2011 14:46 # 0
ctm 11.11.2011 15:03 # 0
да есть такая проблема - в старых версиях дельфи приходилось делать самому:(
lucidfoxGovno 11.11.2011 13:55 # −4
Ооооо. Да ты над проектами серьёзными не работал.
d_dev 11.11.2011 14:00 # 0
я матан вообще стороной стараюсь обходить.
ctm 11.11.2011 15:02 # 0
lucidfoxGovno 11.11.2011 15:15 # −6
Если тебе не приходилось, то это не значит, что другим не приходилось.
>98% программистов сталкиваются с этой задачей наверное только в студенческие годы
Это твоё утверждение полностью голословно. Или подтверди статистикой или не зачет.
d_dev 11.11.2011 15:20 # +2
2. с чего я какому-то гавну должен что-то доказывать?
roman-kashitsyn 11.11.2011 15:20 # +4
lucidfoxGovno 11.11.2011 15:35 # −6
Формочки клепаешь и странички верстаешь? Зачет.
defecate-plusplus 11.11.2011 13:49 # +2
d_dev 11.11.2011 14:24 # −1
roman-kashitsyn 11.11.2011 14:26 # +2
greno 11.11.2011 16:16 # 0
import Numeric.LinearAlgebra -- hmatrix
inv $ (2><2) [1,2,0,1] -- выведет [1,-2,0,1]
defecate-plusplus 11.11.2011 16:36 # +2
вот приведенный выше код, мать его, работает в 1 поток, поэтому сливает на больших матрицах реализациям в том же Maple, поэтому нужно искать другие варианты
в любом случае, С++ не самый удобный язык для математиков
greno 11.11.2011 16:42 # 0
hmatrix реализована с помощью GSL, BLAS and LAPACK, так что полагаю, сравнимо.
> самостоятельно параллелится на доступные вычислительные ресурсы?
Удивился бы). А разве обратная матрица легко параллелится? (для такой задачи надо что-то вроде низкоуровнего mpi).
defecate-plusplus 11.11.2011 16:46 # 0
на маленьких матрицах мапл, конечно, сливал
проверял банальным образом - собрал из этого кода dll и подцпелял в мапле, смотрел мапловское время использования обоих способов на одинаковых матрицах
пришлось погуглить алгоритмы распараллеливания вычисления обратной матрицы, понял, что они существуют, но за пару вечеров я это не сотворю, на чем и остановился
greno 11.11.2011 17:21 # 0
это понятно, имелось ввиду, что это нетривиально
На это натыкались: http://www.mcs.anl.gov/research/projects/mpi/libraries.html? (scalapack).
Возможно, есть пакеты и в дистрибутивах gnu/linux.
defecate-plusplus 11.11.2011 14:31 # +2
создаем матрицу для результата и сразу инициируем её единичной матрицей
подготавливаем матрицу перестановок соответствующего размера
двумя методами проводим LU-разложение и получаем обратную матрицу
никаких магических чисел и ограничений по размеру
defecate-plusplus 11.11.2011 14:47 # 0
lucidfoxGovno 11.11.2011 13:54 # −1
Почему?
roman-kashitsyn 11.11.2011 10:50 # +2
bartimeus33nt10 11.11.2011 20:51 # −3
roman-kashitsyn 12.11.2011 08:56 # +2
2. Личные настройки
3. Уведомлять меня о новых комментариях к моему говнокоду := Нет, прекратите это немедленно!
4. ...
5. PROFIT!
bartimeus33nt10 12.11.2011 15:58 # −10
TarasB 12.11.2011 16:26 # +1
Lure Of Chaos 12.11.2011 17:54 # 0
TarasB 12.11.2011 18:24 # +2
Lure Of Chaos 12.11.2011 18:26 # −1
eth0 12.11.2011 11:06 # +4