nebula
nebula

Reputation: 4002

Multiply, divide & square root without using arithmetic operators

How can I multiply and divide without using arithmetic operators? I read similar question here but i still have problem to multiply and divide.

Also, how can square root be calculated without using math functions?

Upvotes: 3

Views: 7417

Answers (3)

user10F64D4
user10F64D4

Reputation: 6661

Fast square root function(even faster than the library function!):

EDIT: not true, actually slower because of recent hardware improvements. This is however the code used in Quake II.

double fsqrt (double y)
{
    double x, z, tempf;
    unsigned long *tfptr = ((unsigned long *)&tempf) + 1;
    tempf = y;
    *tfptr = (0xbfcdd90a - *tfptr)>>1; /* estimate of 1/sqrt(y) */
    x =  tempf;
    z =  y*0.5;                        /* hoist out the “/2”    */
    x = (1.5*x) - (x*x)*(x*z);         /* iteration formula     */
    x = (1.5*x) – (x*x)*(x*z);
    // x = (1.5*x) – (x*x)*(x*z);      /* not necessary in games */
    return x*y;
}

Upvotes: 0

moooeeeep
moooeeeep

Reputation: 32542

if you have addition and negation, as in the highest voted answer to the post you gave, you can use looped additions and subtractions to implement multiplication and division.

As for the square root, just implement Newton's Iteration on the basis of the operations from step 1.

Upvotes: 2

AlexTheo
AlexTheo

Reputation: 4184

Using bitwise operators one example I found is here:

http://geeki.wordpress.com/2007/12/12/adding-two-numbers-with-bitwise-and-shift-operators/

Addition can be translated to multiplicity and division. For sqrt you could use Taylor series. http://en.wikipedia.org/wiki/Taylor_series

Upvotes: 0

Related Questions