Monday, 29 November 2021

positive and negative fraction to binary conversion

I am trying to convert positive and negative fractions to binary, I found the following approach online (https://www.geeksforgeeks.org/convert-decimal-fraction-binary-number/) to convert positive fractions to binary and tried to extend it to support the negative fractions. I am trying to do the 2's complement on the fractional part. Any help is much appreciated.

# decimal to binary number

# Function to convert decimal to binary
# upto k-precision after decimal point
def decimalToBinary(num, k_prec) :

    binary = ""

    # Fetch the integral part of
    # decimal number
    Integral = int(num)

    # Fetch the fractional part
    # decimal number
    fractional = num - Integral

    # Conversion of integral part to
    # binary equivalent
    while (Integral) :
        
        rem = Integral % 2

        # Append 0 in binary
        binary += str(rem);

        Integral //= 2
    
    # Reverse string to get original
    # binary equivalent
    binary = binary[ : : -1]

    # Append point before conversion
    # of fractional part
    binary += '.'

    # Conversion of fractional part
    # to binary equivalent
    while (k_prec) :
        
        # Find next bit in fraction
        fractional *= 2
        fract_bit = int(fractional)

        if (fract_bit == 1) :
            
            fractional -= fract_bit
            binary += '1'
            
        else :
            binary += '0'

        k_prec -= 1

    if (num < 0): // if negative numbers do the two's complement
        binary = ~binary // struck here.
    else:
        binary = binary
    return binary

# Driver code
if __name__ == "__main__" :
    num_list=[1, 0, 0.924, -0.383]
    for i in num_list:
        print(i, decimalToBinary(i,8))
macky@test:~/test$ python frac_to_binary.py 
(1, '1.00000000')
(0, '.00000000')
(0.924, '.11101100')
Traceback (most recent call last):
  File "frac_to_binary.py", line 63, in <module>
    print(i, decimalToBinary(i,8))
  File "frac_to_binary.py", line 54, in decimalToBinary
    binary = ~binary
TypeError: bad operand type for unary ~: 'str'



from positive and negative fraction to binary conversion

No comments:

Post a Comment