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.
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 Representation 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 Representation 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\n" ; $m = 0.72; $result = toBinary( $m ); echo "(" . $result . ")" ; // This code is contributed by mits ?> |
Javascript
<script> // JavaScript 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" let answer = "" let frac = 0.5 answer = answer + "." // 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 b = n * 2 if (b >= 1){ answer = answer + "1" n = b - 1 } else { answer = answer + "0" n = b } } return answer } // Driver code let n = 0.625 let result = toBinary(n) document.write(`(0 ${result}) in base 2`, "</br>" ) let m = 0.72 result = toBinary(m) document.write(`(${result})`, "</br>" ) // This code is contributed by Shinjanpatra </script> |
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 representation 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 representation 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\n" ); $m = 0.72; $result = toBinary( $m ); print ( "(" . $result . ")" ); // This code is contributed // by chandan_jnu ?> |
Javascript
<script> // Javascript program to Binary real // number to String. // Main function to convert Binary // real number to String function printBinary(num) { // Check Number is Between // 0 to 1 or Not if (num >= 1 || num <= 0) return "ERROR" ; let binary = "" ; let 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 = frac / 2; } return binary; } // Driver code // Input value in Decimal let num1 = 0.625; let output = printBinary(num1); document.write( "(0" + output + ") in base 2" + "</br>" ); let num2 = 0.72; output = printBinary(num2); document.write( "(" + output + ") " ); // This code is contributed by rameshtravel07 </script> |
Output:
(0.101) in base 2 (ERROR)
Both approaches are equally good; choose the one you feel most comfortable with.
This article is contributed by Mr. Somesh Awasthi.