Приветствуем на Форум Херсона. Форум Херсонской молодежи.. На данный момент Вы находитесь на форуме как Гость и имеете очень ограниченные возможности и права. Что бы писать или отвечать в темах, загружать картинки, файлы на форуме Вам нужно зарегистрироваться, что совершенно бесплатно. Регистрация очень быстрая, не откладывайте эту процедуру! Если возникнут проблемы с регистрацией напишите нам. |
|
Программирование Все вопросы по написанию программ |
|
Опции темы |
28.04.2009, 22:22 | #1 (Ссылка на пост) | ||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
Копилка
Топик для постинга небольших забавных/нужных кусков кода, интересных фактов и т.п.
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? Последний раз редактировалось Lester, 28.04.2009 в 22:26. |
||||||||
|
29.04.2009, 09:55 | #2 (Ссылка на пост) | ||||||||
Местные мы
Пол:
Благодарил(а): 457
Благодарили 620 раз в 179 постах
Галерея:
0
Вес репутации: 23
|
Ну вот, из серии быстродействия:
Получение abs значения float-а (путем сбрасывания знакового бита) Код:
float m_absf(float x) { DWORD t = (*((DWORD*)&x)) & 0x7fffffff; return *((float*)&t); } Потом, получение квадратного корня, не помню какая погрешность, но она конечно есть. Это я высмотрел в движке Q3. Код:
float m_sqrt(const float &x) { DWORD tmp = ((ONE_AS_INTEGER<<1) + ONE_AS_INTEGER - *(DWORD*)&x)>>1; float y = *(float*)&tmp; return x*y*(1.47f - 0.47f*x*y*y); } #define ONE_AS_INTEGER ((DWORD)(0x3F800000)) из той же серии, только вычисляет 1.0f / sqrt(x) Код:
float m_rsqrt(float number) { int i; float x2, y; const float threehalfs = 1.5f; x2 = number*0.5f; y = number; i = *(long*)&y; i = 0x5f3759df - (i>>1); y = *(float*)&i; y = y*(threehalfs - (x2*y*y)); // y = y*(threehalfs - (x2*y*y)); // for greater accuracy return y; } А еще мне понравился ассемблер математического процессора, вот как например можно вычислить синус/косинус, корень (и т.д.) на нем: Код:
float m_sin_asm(float angle) { volatile float res; _asm { FLD angle FSIN // если будет FCOS - будет косинус, если FSQRT - будет корень и т.д. FSTP res } return res; } Часто нужно вычислять синус и косинус сразу для одного угла (например при рисовании круга), тогда можно сделать так: Код:
void m_sin_cos_asm(float *sn, float *cs, float angle) { _asm { FLD angle FSINCOS MOV edx, DWORD PTR [cs] MOV eax, DWORD PTR [sn] FSTP DWORD ptr [edx] FSTP DWORD ptr [eax] } } |
||||||||
|
30.04.2009, 10:59 | #3 (Ссылка на пост) | ||||||||
Уже сменил себе статус
Пол:
Благодарил(а): 3,844
Благодарили 1,942 раз в 919 постах
Галерея:
0
Вес репутации: 40
|
Немного о .Net-е.
В самом .Net-е нет аналогов union из c++. Но можно сделать его подобие таким образом: Код:
[StructLayout(LayoutKind.Explicit)] public struct TestStruct { [FieldOffset(0)] public int a; [FieldOffset(0)] public float b; } |
||||||||
|
24.05.2009, 06:52 | #4 (Ссылка на пост) | ||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
Хотите запутать исходный код( например, когда его надо отдавать недобросовесному заказчику )? Маленькая утилитка cobfusc в Linux позволит вам сделать это( при этом все ес-но будет компилироваться без проблем ), вот пример результата:
PHP код:
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? |
||||||||
|
17.06.2009, 00:42 | #5 (Ссылка на пост) | ||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
Программа, которая работает одновременно в C, C++, Haskell, Ruby, Python, Perl(x2), HTML, tcl, bash, zsh, make, bash и brainfuck:
PHP код:
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? |
||||||||
|
28.06.2009, 10:14 | #6 (Ссылка на пост) | ||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
Быстрое возведение в степень( сложность алгоритма O(lnn) вместо O(n) ).
PHP код:
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? |
||||||||
|