- 1
- 2
- 3
- 4
- 5
- 6
private byte Summ(byte a, byte b, byte p)
{
return Or(Or(Or(And(p, Not(a)), And(p, Not(b))), Or(And(b, Not(a)), And(b, Not(a))))Or(And(a, Not(b)),And(a, Not(p))), ()) ;//тут я и сломался
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+134
private byte Summ(byte a, byte b, byte p)
{
return Or(Or(Or(And(p, Not(a)), And(p, Not(b))), Or(And(b, Not(a)), And(b, Not(a))))Or(And(a, Not(b)),And(a, Not(p))), ()) ;//тут я и сломался
}
bormand 17.05.2014 07:46 # +4
3.14159265 17.05.2014 15:04 # 0
Жуткая переголова.
Хотя я читал что например ghc может упаковать такой возврат в один регистр.
> a, b, p - это не байты, а биты?
p - точно флаг переноса. А так можно и по 32 бита складывать.рекурсивно
bormand 17.05.2014 18:47 # 0
Если этот Summ заинлайнится в цикл из которого его будут вызывать, и компилятор додумается выкинуть Tuple, заменив его парой локальных переменных - переголовы не будет...
P.S. Ну и кого волнует черезголова в проге, демонстрирующей принципы работы сумматора с последовательным переносом? :)
3.14159265 18.05.2014 19:44 # 0
В сишарпе компилятор ничего не выкинет, это не кресты.
Насчёт оптимизации и аллокации CLR на стеке точно не знаю, но и сильно в этом сомневаюсь.
Кортеж - это объект, а не структура. Зачем тогда вообще struct и stackalloc в язык пилить?
Sabrian 11.06.2014 12:03 # +1
3.14159265 11.06.2014 14:56 # +1
Чего ж мне не верить? Я видел много чудес сотворённых джитом, например инлайн виртуальных методом.
>разворачивает классы в набор полей на стеке (это только с 4.0).
Тогда зачем тогда вообще struct и stackalloc в язык пилить?