Tutorialspoint.dev

Converting a Real Number (between 0 and 1) to Binary String

Given a real number between 0 and 1 (e.g., 0.72) that is passed in as a double, print the binary representation. If the number cannot be represented accurately in binary with at most 32 characters, print” ERROR:’
Examples:

Input :  (0.625)10
Output : (0.101)2

Input : (0.72)10
Output : ERROR



Solution: First, let’s start off by asking ourselves what a non-integer number in binary looks like. By analogy to a decimal number, the binary number 0 .1012 would look like:

0. 1012 = 1 * 1/21 + 0 *1/22 + 1 * 1/23 .

Method 1: Multiply the decimal part by 2

To print the decimal part, we can multiply by 2 and check if 2*n is greater than or equal to 1. This is essentially “shifting” the fractional sum. That is:

r = 210 * n;
  = 210 * 0.1012;
  = 1 * 1/20 + 0 *1/21 + 1 * 1/22;
  = 1.012;

If r >= 1, then we know that n had a 1 right after the decimal point. By doing this continuously, we can check every digit.

div class="responsive-tabs">

C++

// C++ program to binary real number to string
#include <iostream>
#include<string>
using namespace std;
  
// Function to convert Binary real
// number to String
string toBinary(double n)
{
    // Check if the number is Between 0 to 1 or Not
    if (n >= 1 || n <= 0)
        return "ERROR";
  
    string answer;
    double frac = 0.5;
    answer.append(".");
  
    // Setting a limit on length: 32 characters.         
    while (n > 0)
    {
          
        //Setting a limit on length: 32 characters     
        if (answer.length() >= 32)
                return "ERROR";
  
            // Multiply n by 2 to check it 1 or 0
            double b = n * 2;
            if (b >= 1)
            {
                answer.append("1");
                n = b - 1;
            }
            else
            {
                answer.append("0");
                n = b;
            }
        }
        return answer;
}
  
// Driver code
int main()
{
    // Input value 
    double n = 0.625; 
      
    string result = toBinary(n);
    cout<<"(0"<< result <<") in base 2"<<endl;
  
    double m = 0.72;
    result= toBinary(m);
    cout<<"("<<result<<")"<<endl; 
}
  
// This code is contributed by Himanshu Batra

Java

// Java program to Binary real number to String.
import java.lang.*;
import java.io.*;
import java.util.*;
  
// Class Reperesentation of Binary real number
// to String
class BinaryToString
{
    // Main function to convert Binary real number
    // to String
    static String printBinary(double num)
    {
        // Check Number is Between 0 to 1 or Not
        if (num >= 1 || num <= 0)
            return "ERROR";
  
        StringBuilder binary = new StringBuilder();
        binary.append(".");
  
        while (num > 0)
        {
            /* Setting a limit on length: 32 characters,
               If the number cannot be represented
               accurately in binary with at most 32
               character  */
            if (binary.length() >= 32)
                return "ERROR";
  
            // Multiply by 2 in num to check it 1 or 0
            double r = num * 2;
            if (r >= 1)
            {
                binary.append(1);
                num = r - 1;
            }
            else
            {
                binary.append(0);
                num = r;
            }
        }
        return binary.toString();
    }
  
    // Driver Code
    public static void main(String[] args)
    {
        double num1 = 0.625; // Input value in Decimal
        String output = printBinary(num1);
        System.out.println("(0" + output + ")  in base 2");
  
        double num2 = 0.72;
        output = printBinary(num2);
        System.out.println("(" + output + ") ");
    }
}

Python3

# Python3 program to binary real number to string
  
# Function to convert Binary real
# number to String
def toBinary(n):
  
    # Check if the number is Between 0 to 1 or Not
    if(n >= 1 or n <= 0):
        return "ERROR"
  
    answer = ""
    frac = 0.5
    answer = answer + "."
  
    # Setting a limit on length: 32 characters.
    while(n > 0):
  
        # Setting a limit on length: 32 characters
        if(len(answer) >= 32):
            return "ERROR"
  
        # Multiply n by 2 to check it 1 or 0
        b = n * 2
        if (b >= 1):
  
            answer = answer + "1"
            n = b - 1
  
        else:
            answer = answer + "0"
            n = b
  
    return answer
  
# Driver code
if __name__=='__main__':
    n = 0.625
    result = toBinary(n)
    print("(0", result, ") in base 2")
    m = 0.72
    result = toBinary(m)
    print("(", result, ")")
  
# This code is contributed by
# Sanjit_Prasad

C#

// C# program to Binary real number to String. 
  
using System;
using System.Text;
  
// Class Reperesentation of Binary real number 
// to String 
class BinaryToString 
    // Main function to convert Binary real number 
    // to String 
    static String printBinary(double num) 
    
        // Check Number is Between 0 to 1 or Not 
        if (num >= 1 || num <= 0) 
            return "ERROR"
  
        StringBuilder binary = new StringBuilder(); 
        binary.Append("."); 
  
        while (num > 0) 
        
            /* Setting a limit on length: 32 characters, 
            If the number cannot be represented 
            accurately in binary with at most 32 
            character */
            if (binary.Length >= 32) 
                return "ERROR"
  
            // Multiply by 2 in num to check it 1 or 0 
            double r = num * 2; 
            if (r >= 1) 
            
                binary.Append(1); 
                num = r - 1; 
            
            else
            
                binary.Append(0); 
                num = r; 
            
        
        return binary.ToString(); 
    
  
    // Driver Code 
    public static void Main() 
    
        double num1 = 0.625; // Input value in Decimal 
        String output = printBinary(num1); 
        Console.WriteLine("(0 " + output + ") in base 2"); 
  
        double num2 = 0.72; 
        output = printBinary(num2); 
    Console.WriteLine("(" + output + ") "); 
    

PHP

<?php
// PHP program to binary real number
// to string
  
// Function to convert Binary real
// number to String
function toBinary($n)
{
    // Check if the number is Between
    // 0 to 1 or Not
    if ($n >= 1 || $n <= 0)
        return "ERROR";
  
    $answer = "";
    $frac = 0.5;
    $answer .= ".";
  
    // Setting a limit on length: 32 characters.         
    while ($n > 0)
    {
          
        //Setting a limit on length: 32 characters 
        if (strlen($answer) >= 32)
                return "ERROR";
  
            // Multiply n by 2 to check it 1 or 0
            $b = $n * 2;
            if ($b >= 1)
            {
                $answer .= "1";
                $n = $b - 1;
            }
            else
            {
                $answer .= "0";
                $n = $b;
            }
        }
        return $answer;
}
  
// Driver code
  
// Input value 
$n = 0.625; 
  
$result = toBinary($n);
echo "(0" . $result . ") in base 2 ";
  
$m = 0.72;
$result= toBinary($m);
echo "(" . $result . ")";
      
// This code is contributed by mits
?>


Output:

(0.101)  in base 2
(ERROR) 

Method 2

Alternatively, rather than multiplying the number by two and comparing it to 1, we can compare the number to . 5, then . 25, and so on. The code below demonstrates this approach.

C++

// C++ program to Binary real number to String.
#include <iostream>
#include<string>
using namespace std;
  
// Function to convert Binary real
// number to String
string toBinary(double n)
{
    // Check if the number is Between 0 to 1 or Not
    if (n >= 1 || n <= 0)
        return "ERROR";
  
    string answer;
    double frac = 0.5;
    answer.append(".");
  
    // Setting a limit on length: 32 characters.         
    while (n > 0)
    {
        // 32 char max
        if (answer.length() >= 32)
            return "ERROR";
    // compare the number to .5
        if (n >= frac)
        {
            answer.append("1");
            n = n- frac;
        }
        else
        {
            answer.append("0");
        }
          
        frac /= 2;
    }
    return answer;
}
  
// Driver code
int main()
{
    // Input value 
    double n = 0.625;
      
    string result = toBinary(n);
    cout<<"(0"<< result <<") in base 2"<<endl;
  
    double m = 0.72;
    result= toBinary(m);
    cout<<"("<<result<<")"<<endl; 
}

Java

// Java program to Binary real number to String.
import java.lang.*;
import java.io.*;
import java.util.*;
  
// Class Reperesentation of Binary real number
// to String
class BinaryToString
{
    // Main function to convert Binary real
    // number to String
    static String printBinary(double num)
    {
        // Check Number is Between 0 to 1 or Not
        if (num >= 1 || num <= 0)
            return "ERROR";
  
        StringBuilder binary = new StringBuilder();
        double frac = 0.5;
        binary.append(".");
  
        while (num > 0)
        {
            /* Setting a limit on length: 32 characters,
               If the number cannot be represented
               accurately in binary with at most 32
               characters  */
            if (binary.length() >= 32)
                return "ERROR";
  
            // It compare the number to . 5.
            if (num >= frac)
            {
                binary.append(1);
                num -= frac;
            }
            else            
                binary.append(0);
  
            // Now it become 0.25
            frac /= 2;
        }
        return binary.toString();
    }
  
    // Driver Code
    public static void main(String[] args)
    {
        double num1 = 0.625; // Input value in Decimal
        String output = printBinary(num1);
        System.out.println("(0" + output + ")  in base 2");
  
        double num2 = 0.72;
        output = printBinary(num2);
        System.out.println("(" + output + ") ");
    }
}

Python3

# Python3 program to Binary real number to String.

# Function to convert Binary real
# number to String
def toBinary(n):

# Check if the number is Between
# 0 to 1 or Not
if (n >= 1 or n <= 0): return "ERROR"; frac = 0.5; answer = "."; # Setting a limit on length: 32 characters. while (n > 0):

# 32 char max
if (len(answer) >= 32):
return “ERROR”;

# compare the number to .5
if (n >= frac):
answer += “1”;
n = n – frac;
else:
answer += “0”;

frac = (frac / 2);

return answer;

# Driver code

# Input value
n = 0.625;

result = toBinary(n);
print(“( 0”, result, “) in base 2”);

m = 0.72;
result = toBinary(m);
print(“(“, result, “)”);

# This code is contributed
# by mits

C#

// C# program to Binary real number to String. 
using System;
  
// Class Reperesentation of Binary 
// real number to String 
class BinaryToString 
    // Main function to convert Binary
    // real number to String 
    static string printBinary(double num) 
    
        // Check Number is Between 
        // 0 to 1 or Not 
        if (num >= 1 || num <= 0) 
            return "ERROR"
  
        string binary = ""
        double frac = 0.5; 
        binary += "."
  
        while (num > 0) 
        
            /* Setting a limit on length: 32 characters, 
            If the number cannot be represented 
            accurately in binary with at most 32 
            characters */
            if (binary.Length >= 32) 
                return "ERROR"
  
            // It compare the number to . 5. 
            if (num >= frac) 
            
                binary += "1"
                num -= frac; 
            
            else        
                binary += "0"
  
            // Now it become 0.25 
            frac /= 2; 
        
        return binary; 
    
  
    // Driver Code 
    public static void Main() 
    
        double num1 = 0.625; // Input value in Decimal 
        String output = printBinary(num1); 
        Console.WriteLine("(0" + output + ") in base 2"); 
  
        double num2 = 0.72; 
        output = printBinary(num2); 
        Console.WriteLine("(" + output + ") "); 
    
  
// This code is contributed by mits

PHP

<?php
// PHP program to Binary real number to String.
  
// Function to convert Binary real
// number to String
function toBinary($n)
{
    // Check if the number is Between 
    // 0 to 1 or Not
    if ($n >= 1 || $n <= 0)
        return "ERROR";
  
    $frac = 0.5;
    $answer = ".";
  
    // Setting a limit on length: 32 characters.         
    while ($n > 0)
    {
        // 32 char max
        if (strlen($answer) >= 32)
            return "ERROR";
              
        // compare the number to .5
        if ($n >= $frac)
        {
            $answer.="1";
            $n = $n - $frac;
        }
        else
        {
            $answer.="0";
        }
          
        $frac = ($frac / 2);
    }
    return $answer;
}
  
// Driver code
  
// Input value 
$n = 0.625;
  
$result = toBinary($n);
print("(0".$result.") in base 2 ");
  
$m = 0.72;
$result = toBinary($m);
print("(".$result.")"); 
  
// This code is contributed 
// by chandan_jnu
?>


Output:

(0.101)  in base 2
(ERROR)  

Both approaches are equally good; choose the one you feel most comfortable with.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



This article is attributed to GeeksforGeeks.org

You Might Also Like

leave a comment

code

0 Comments

load comments

Subscribe to Our Newsletter