- 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
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *concat(char *a, char *b)
{
char *ptr = malloc(strlen(a)+strlen(b)+6);
if (ptr == NULL)
{
fprintf(stderr, "da ty ohuel!\n");
exit(-1);
}
sprintf(ptr, "(%s)*(%s)", a, b);
return ptr;
}
char *govno[255] = {"a"};
void printfshit(const size_t pow, const char *mul_stuff)
{
printf("double pow_%zu(double a) {return %s;}\n\n", pow, mul_stuff);
}
void genshit(void)
{
//printfshit(0,"1");
size_t end_ind = 1;
size_t prev_stop = 0;
size_t end_ind_tmp = 1;
while (end_ind < 255)
{
for (size_t ind1 = 0; ind1 < end_ind_tmp; ind1++)
{
for (size_t ind2 = prev_stop; ind2 < end_ind_tmp; ind2++)
{
if (
((ind1+1) + (ind2+1) < 256) &&
(govno[(ind1+1) + (ind2+1)-1] == NULL)
)
{
govno[(ind1+1) + (ind2+1)-1] = concat(govno[ind1], govno[ind2]);
end_ind++;
}
}
}
prev_stop = end_ind_tmp;
end_ind_tmp = end_ind;
}
printfshit(1,govno[0]);
for (size_t i = 1; i < 255; i++ )
{
printfshit(i+1,govno[i]);
free(govno[i]);
}
}
int main(void)
{
genshit();
return 0;
}
j123123 08.08.2017 16:34 # 0
чтоб поменьше гомоиконности скобочек
defecate-plusplus 08.08.2017 17:45 # 0
Эх, что-то сосёт твой способ, прости.
Например:
https://godbolt.org/g/ncjYTy
Теперь давай посмотрим ЧТО ЖЕ БЛЯДЬ мне пришлось такого нихуево здоровенного написать на непонятных крестах:
да, куда уж этой говнометушне до охуенно понятной (только одному человеку) генерелке на сишке....
j123123 08.08.2017 17:55 # 0
> Например:
Например, давай на clang-е проверим, а не на GCC
Так кто тут сосет?
defecate-plusplus 08.08.2017 18:13 # +3
На, не расстраивайся, я оптимизнул и под шланг, хули, я достиг:
> эту хуйню генерировала например под жабу
Чтобы жаба перестала тормозить надо всего лишь ЧИТАТЬ ДАЛЕЕ >>>
inkanus-gray 09.08.2017 00:11 # +2
Проверил. Прочитал далее. Пока читал, жаба отработала.
Спасибо, помогло. Теперь буду запасаться газетами и журналами перед запуском жабы, чтобы было не так скучно ждать.
inkanus-gray 10.08.2017 12:28 # +3
Чтобы Jawa перестала тормозить, надо всего лишь (спойлер: перекусить бокорезами тросик ручного тормоза).
bormand 08.08.2017 18:39 # +4
Все. Flawless victory и на шланге и на гцц.
sos 08.08.2017 23:28 # 0
bormand 09.08.2017 00:01 # 0
j123123 09.08.2017 02:41 # 0
Поможем Даше посчитать инструкции умножения https://godbolt.org/g/f2zCax
Четырнадцать!
Теперь, посчитаем еще раз, для другого кода:
Восемь инструкций, имеющих отношение к умножению!
А что меньше, восемь или четырнадцать? Правильно, восемь!
j123123 09.08.2017 03:05 # 0
bormand 09.08.2017 18:52 # 0
bormand 09.08.2017 18:59 # 0
j123123 10.08.2017 09:56 # 0
j123123 08.08.2017 17:59 # 0
И что самое охуительное, генерилку на сишке я могу легко переделать, чтобы она эту хуйню генерировала например под жабу, раст или какой-нибудь свифт, а убогая плюсовая шаблоноебля только в плюсах и умеет работать
Antervis 08.08.2017 19:50 # +3
j123123 09.08.2017 03:44 # 0
j123123 09.08.2017 03:53 # 0
https://wandbox.org/permlink/idu5Yv1qS6hNi7w1
j123123 09.08.2017 03:38 # 0
А как сделать чтоб без копипаста? Чтоб там оно через плюсовую метушню само сдвиги находило?
ну и так далее?
j123123 09.08.2017 06:45 # 0
j123123 09.08.2017 03:56 # 0
Это говно, т.к. 0 в степени 0 это неопределенность
defecate-plusplus 09.08.2017 13:01 # −1
http://ideone.com/ksb61B
roman-kashitsyn 09.08.2017 13:28 # +4
Dummy00001 09.08.2017 16:12 # 0
sos 09.08.2017 13:10 # +1
omg not this shit again
Antervis 08.08.2017 19:48 # 0
https://godbolt.org/g/oCDsVE
п.с. пришлось явно указывать тип array для clang, а я думал у них полная поддержка с++17
Antervis 08.08.2017 20:24 # 0
subaru 08.08.2017 21:27 # 0
bormand 08.08.2017 22:32 # 0
Antervis 09.08.2017 09:15 # 0
bormand 08.08.2017 23:23 # 0
j123123 09.08.2017 02:01 # 0
Поможем Даше посчитать инструкции умножения https://godbolt.org/g/tpNJfu
Одинадцать!
Теперь, посчитаем еще раз, для другого кода:
Восемь инструкций, имеющих отношение к умножению!
А что меньше, восемь или одинадцать? Правильно, восемь!
Antervis 09.08.2017 09:09 # 0
2. не забывай, что шаблонную реализацию одного отдельно взятого случая можно переопределить. Делать это в том кодогенераторе сломаешься
j123123 09.08.2017 13:48 # 0
Важно не количество инструкций вообще, а умение ими пользоваться количество инструкций умножения. Ведь смысл всей этой хрени как раз в том и заключается, чтобы минимизировать число умножений
> 2. не забывай, что шаблонную реализацию одного отдельно взятого случая можно переопределить. Делать это в том кодогенераторе сломаешься
https://wandbox.org/permlink/M5RYYnoostcgCPNA
Antervis 09.08.2017 16:19 # 0
п.с. еще не забывай, что на мк, где может реально понадобиться табличный pow, SSE не будет
j123123 10.08.2017 08:12 # 0
Ну ясен хрен, все эти инструкции нужны. И на самом-то деле хрен его знает, что сожрет больше времени - немного лишнего умножения или немного лишнего мува. Я немного тут побенчмаркал всю эту поеботу, и кодогенератор выигрывает у твоей реализации http://paste.debian.net/980717/
Однако, если __attribute__ ((always_inline)) заменить на __attribute__ ((noinline)), выигрывает уже твоя шаблонная версия. О чем это говорит? А говорит это о том, что я писал еще в http://govnokod.ru/23246#comment388922 :
> Но на самом-то деле это все хуита, и настоящие цари все эти 255 функций вручную на ассемблере пишут, а не долбятся с шаблонной поебенью и кодогенераторами
inho 08.08.2017 23:23 # −1
j123123 09.08.2017 05:11 # +1
или например pow_254 считать как pow_256/pow_2
как вам такая идея ОПТИМИЗАЦИИ?
http://nicolas.limare.net/pro/notes/2014/12/12_arit_speed/ - про скорость арифметических операций