ну, я пытался сделать то же самое, что и у вас во втором листинге, но только чтобы результат вычислялся как математическая функция - напрямую без ветвлений :)
ну, обычно для того и перегружают операторы, чтобы ссылки на методы компилятор впиливал, а не switch городить %) впрочем, на cin/cout я и не претендовал %)
#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
Reply
Reply
И еще есть такая вещь как тринарный оператор, чтобы char* не писать.
Reply
только у меня без ветвлений вообще %)
Reply
Reply
впрочем, на cin/cout я и не претендовал %)
Reply
(The comment has been removed)
Reply
Leave a comment