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++ 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 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 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# 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 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
?>
<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++ 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 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 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# 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 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
?>
<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.