### Comparison without relational operators

**Source:**Quant interview at Religare Technova

**Problem:**Write a C program to compare two integers without using relational operators (== != < <= > >=)

Ever played housie/tambola? I played housie once every month for 6 good years of my life. Won some prizes. Each coupon (a ticket with 15 numbers) cost Rs. 10 then. Full Housie was nearly 150 Rs, exact number depending upon the number of tickets sold.

I played one such game once again after a lapse of 6 years I think. At the end of the game I saw that 76 numbers out of 90 had been cut on the board. I couldn't help but to think what is the expected number of numbers I expect to be crossed if N (say 100) tickets have been sold. Also, I wanted to find out what is a good number of people who should be there to play housie. Of course if there are zillions of people, the game would be…

Let's say A keep tossing a fair coin, until he get 2 consecutive heads, define X to be the number of tosses for this process; B keep tossing another fair coin, until he get 3 consecutive heads, define Y to be the number of the tosses for this process.

1) Calculate P{X>Y}

2) What's the expected value of X

3) What's the expected value of Y

This is probably the hardest puzzle I have ever put on my blog. Hence, I will post its solution in the post directly rather than on comment.

Solution:

1)

(Solved by me finally after 13 months :))

Make a state diagram. Let the state be (a,b) where a is the number of consecutive heads streak "A" is on currently and b is the number of consecutive heads streak "B" is on currently.

So, (0,3) (1,3) are final accepted states and (2,0) (2,1) (2,2) (2,3) are failure states. If you get tails, your contribution to the state reaches to "0"

f(State) = P(X>Y | "State" configuration initially)

f(0,0) = 1/4[f(…

1) Calculate P{X>Y}

2) What's the expected value of X

3) What's the expected value of Y

This is probably the hardest puzzle I have ever put on my blog. Hence, I will post its solution in the post directly rather than on comment.

Solution:

1)

(Solved by me finally after 13 months :))

Make a state diagram. Let the state be (a,b) where a is the number of consecutive heads streak "A" is on currently and b is the number of consecutive heads streak "B" is on currently.

So, (0,3) (1,3) are final accepted states and (2,0) (2,1) (2,2) (2,3) are failure states. If you get tails, your contribution to the state reaches to "0"

f(State) = P(X>Y | "State" configuration initially)

f(0,0) = 1/4[f(…

Most of my friends already read an article that I wrote more than an year back - "Speak Up"

Here, inspired by the movie, The Beautiful Mind, I give a mathematical analysis of asking a girl out. Nice time it is. Feb 10. No plans for Feb 14 and I am sure this article makes me look even more geekier and all the more reason for me to believe that I will be alone, yet again. But what the hell, lets do it!

Note: This is not an independent analysis. There are many "mathematics sites" which does "similar" analysis.

@Consultants, correct me if I am wrong in my estimates. :P

Why is there a need to be selective?

From the age of 15, I guess there are approximately 3,600 girls I have liked (On average days, I don't see new girls. But going outside, I like about 30 girls. Saying that I go out once every week right …

int d = a - b;

ReplyDeleteif(d)

{

// a is not equal to b

if( d - abs(d) )

{

// d was negative => b > a

}

else

{

// d was positive => a > b

}

}

else

{

// a == b :)

}

In the implementation of abs(), a relational operator is used to determine whether the number passed is less than or greater than zero.

Deletesay 2 nos are a and b in their n-bit representations. subtract b from a by taking 2's complement of b and adding it to a, multiply it by 100...(n-1 0s). then right-shift the no n-1 times. call it c. multiply c by b. then complement c, multiply it by a. now max = b*c+a*(complement of c)

ReplyDeleteWill this work?

ReplyDeleteint compare(int64_t a, int64_t b)

{

return ((uint64_t) (a - b)) >> 63;

}

Sorry but i couldn't make it simpler..

ReplyDelete#include

#include

int maximum(int x,int y)

{

return(x+y+sqrt(-2*y*x +x*x + y*y))/2;

}

int main()

{

int a,b,c;

scanf("%d%d",&a,&b);

c=maximum(a,b);

printf("\n%d",c);

}

int main () {

ReplyDeleteint a,b;

printf ( "enter the two values u like to compare\n");

scanf (" %d %d",&a,&b);

if (!(a ^ b))

printf ("both are equal\n);

else

printf ("both are not equal\n");

}

int ret_max(int a, int b){

ReplyDeleteint c=a,d=b;

while (c&d){

c&=(c-1);

c&=(d-1);

}

if (c)

return a;

else // also takes care of equality

return b;

}

//to check if no's are equal

ReplyDeleteif(!(a^b))

print(equal)

else if (a/b)

print(b greater than a)

else

print(a greater than b)