tags:

views:

113

answers:

6

suppose we have some arbitrary positive number x i want to know if there is method to represent it's inverse in binary or x's inverse is 1/x how express it in binary? e.x x=5 //101 x's inverese is 1/x it's binary form is=?

+5  A: 

You'd find it the same way you would in decimal form: long division.

There is no shortcut just because you are in another base, although long division is significantly simpler.

Here is a very nice explanation of long division applied to binary numbers.

ld

Although, just to let you know, most floating-point systems on today's machines do very fast division for you.

Justin L.
+1  A: 

In general, the only practical way to "express in binary" an arbitrary fraction is as a pair of integers, numerator and denominator -- "floating point", the most commonly used (and hardware supported) binary representation of non-integer numbers, can represent exactly on those fractions whose denominator (when the fraction is reduced to the minimum terms) is a power of two (and, of course, only when the fixed number of bits allotted to the representation is sufficient for the number we'd like to represent -- but, the latter limitation will also hold for any fixed-size binary representation, including the simplest ones such as integers).

Alex Martelli
A: 

If you just need the first few bits of a binary fraction number, this trick will give you those bits: (2 << 31) / x. But don't use this trick on any real software project. (because it is rough, inaccurate and plainly wrong way to represent the value)

rwong
+1  A: 
0.125          = 0.001b
0.0625         = 0.0001b
0.0078125      = 0.0000001b
0.00390625     = 0.00000001b
0.00048828125  = 0.00000000001b
0.000244140625 = 0.000000000001b
----------------------------------
0.199951171875 = 0.001100110011b

Knock yourself out if you want higher accuracy/precision.

Ignacio Vazquez-Abrams
+1  A: 

Another form of multiplicative inverse takes advantage of the modulo nature of integer arithmetic as implemented on most computers; in your case the 32 bit value 11001100110011001100110011001101 (-858993459 signed int32 or 3435973837 unsigned int32) when multiplied by 5 equals 1 (mod 4294967296). Only values which are coprime with the power of two the modulo operates on have such multiplicative inverses.

Pete Kirkham