- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
...
char det(char a[4][4])
{ float det;
det=a[0][0]*(a[1][1]*(a[2][2]*a[3][3]-a[3][2]*a[2][3])-a[1][2]*(a[2][1]*a[3][3]-a[2][3]*a[3][1])+a[1][3]*(a[2][1]*a[3][2]-a[2][2]*a[3][1]))
-a[0][1]*(-a[1][0]*(a[2][2]*a[3][3]-a[3][2]*a[2][3])-a[1][2]*(a[2][0]*a[3][3]-a[3][0]*a[2][3])+a[1][3]*(a[2][0]*a[3][2]-a[3][0]*a[2][2]))
+a[0][2]*(-a[1][0]*(a[2][1]*a[3][3]-a[3][1]*a[2][3])+a[1][1]*(a[2][0]*a[3][3]-a[3][0]*a[2][3])+a[1][3]*(a[2][0]*a[3][1]-a[2][1]*a[3][0]))
-a[0][3]*(-a[1][0]*(a[2][1]*a[3][2]-a[3][1]*a[2][2])+a[1][1]*(a[2][0]*a[3][2]-a[3][0]*a[2][2])-a[1][2]*(a[2][0]*a[3][1]-a[3][0]*a[2][1]));
return(det);
};
...
если это говно, то повально все реализации алгоритмов кодирования и хэширования ( например http://people.csail.mit.edu/rivest/Md5.c ) тоже говно.
Тем более что речь об оптимизации любой ценой.
Ох, мне мерещится... :(
Просто школяр не знал циклов.
современный компилятор при виде кода выше навярняка прикрутит какие CPU-специфичные SIMD инструкции. соптимизировать руками то можно - но оно будет непортабельно и я сомневаюсь что быстрее того что компилятор сам может сделать.
Смысл ответа заключался не в том, как компилятор будет оптимизировать (откуда вы знаете, может он RTL сначала создает, и его, или похожий, и его оптимизирует - техник же разных море, но не об том речь), а в том, что код не оптимизирован / оптимизация явно не являлась тут приоритетом.
ёпрст. а цыклы сами собой развернулись??
В смысле, само по себе разворачивание цикла может ничего и не дать. Ну, опять же, код не дает никаких оснований предполагать, что автор что-то замерял / проверял, и пришел к такому решению потому, что оно было оптимальнее какого-то другого. В коде нет даже намека на такие действия. Просто человек написал первое, что ему пришло в голову, и нет тут никакого скрытого смысла...
%\
Между делом. В этом коде каждый минор второго порядка считается 2 раза, многие из них - неявно, нужно пораскрывать скобочки, перегруппировать. Просто поищите глазами выражение "(a[2][2]*a[3][3]-a[3][2]*a[2][3])".
А если оптимизировать, то я бы взял Лапласа и SSE-инструкции.
Это победа.
My bad: я увидел только часть ИСТИНЫ.
В общем: полное беспросветное говно, не имеющее никаких оправданий.
google> site:otvet.mail.ru "1_and_0"