С++

Oct 01, 2011 13:18

Этому посту полагается иметь тэги "говно" и "С++". Однако я не буду их ставить, поскольку надеюсь не так уж часто об этом писать.

Код на С++ моего авторства - да, это ужасно )

непонятные буковки, вышел из себя в открытый космос

Leave a comment

perepertoz October 1 2011, 12:52:48 UTC
а вы попробуйте вот так:
#include
#include
int main()
{
float x,y, x2,y2;
int s = 0;
cout<<"Insert x and y: ";
cin>>x>>y;

x2 = x + y; // тут должны были быть 1/sqrt(2)
y2 = -x + y; // но я их не буду писать :)

s = (((x2 * y2) >= 0) & 1) +
(((1 + y) >= 0) & 1) +
(((1 - y) >= 0) & 1);
s = ((s - 3) >= 0) & 1;
// в принципе, каждое из ((N >= 0) & 1)
// можно очевидно заменить к примеру на (((int8)-N) >> 7)
// и таким образом переводить ветвления в линейные вычисления
// :)
char* yes = "Yes!";
char* no = "No";
char* res = (char*)(s*(long)yes + (1-s)*(long)no);

cout<

Reply

evilduckk October 1 2011, 14:11:19 UTC
Ничего не поняла.

Reply

perepertoz October 1 2011, 15:30:13 UTC
ну, я пытался сделать то же самое, что и у вас во втором листинге, но только чтобы результат вычислялся как математическая функция - напрямую без ветвлений :)

Reply

udpn October 1 2011, 17:11:48 UTC
По-моему это |x| <= |y| <= 1.
И еще есть такая вещь как тринарный оператор, чтобы char* не писать.

Reply

perepertoz October 1 2011, 17:24:32 UTC
вариант :)
только у меня без ветвлений вообще %)

Reply

udpn October 1 2011, 18:01:29 UTC
Не уверен, что в cin и cout их нет.

Reply

perepertoz October 1 2011, 18:15:35 UTC
ну, обычно для того и перегружают операторы, чтобы ссылки на методы компилятор впиливал, а не switch городить %)
впрочем, на cin/cout я и не претендовал %)

Reply

(The comment has been removed)

udpn October 4 2011, 08:59:13 UTC
abs(x) <= abs(y) && abs(y) <= 1

Reply


Leave a comment

Up