import java.io.*;
import java.util.*;
class FloatingPointAdder
{ int
exp;
Scanner
s=new Scanner(System.in);
float
n1,n2;
String
temp1="",temp2="";
int
exp1,exp2;
String
tmp1="",tmp2="";
char
cry='0';
char
s1='0',s2='0';
String
e1,e2;
String
m1="", m2="";
int
cmn_expo;
void
input()
System.out.println("enter
1st no");
n1=s.nextFloat();
temp1=tobin_Int((int)n1)+"."+tobin_Float(n1-(int)n1);
System.out.println(temp1);
System.out.println("enter
2nd no");
n2=s.nextFloat();
temp2=tobin_Int((int)n2)+"."+tobin_Float(n2-(int)n2);
System.out.println(temp2);
ieeeformat();
}
String
tobin_Int(int n)
{
String
str="";
char
c[]=new char[100];
int
i=-1;
while(n!=0)
{
c[++i]=(char)(n%2);
n=n/2;
}
for(;i>=0;i--)
str+=c[i]-0;
return
str;
}
String
tobin_Float(float n)
{
String
str="";
for(int
i=0;i<5 && n!=0;i++)
{
n=n*2;
str+=(int)n;
if(n>=1)
n=n-1;
}
return
str;
}
void
ieeeformat()
{
if(n1<0)
s1='1';
if(n2<0)
s2='1';
exp1=temp1.indexOf('.')-1;
exp=temp2.indexOf('.')-1;
e1=tobin_Int(exp1+127);
e2=tobin_Int(exp1+127);
for(int
i=1;i<temp1.length();i++)
if(temp1.charAt(i)!='.')
m1+=temp1.charAt(i);
for(int
i=1;i<temp1.length();i++)
if(temp1.charAt(i)!='.')
m2+=temp2.charAt(i);
System.out.println("\n
IEEE FORMAT\n SIGNEXPONENT MANTISSA");
System.out.println(s1+""+e1+""+m1);
System.out.println(s2+""+e2+""+m2+"\n");
addition();
}
void
addition()
{
if(exp1>exp2)
{
cmn_expo=exp1;
for(int
i=0;i<(exp2-exp1);i++)
temp2+='0';
}
if(exp1<exp2)
{
cmn_expo=exp2;
for(int
i=0;i<(exp2-exp1);i++)
tmp1+='0';
}
if(exp1==exp2)
cmn_expo=exp1;
tmp1+='1'+m1;
tmp2+='1'+m2;
addzeros();
char a,b;
String
res="";
for(int
i=tmp1.length()-1;i>=0;i--)
{
a=tmp1.charAt(i);
b=tmp2.charAt(i);
if
(cry=='0')
{
if(a=='0'&&b=='0')
{
cry='0';
res+='0';
}
if((a=='0'&&b=='1')||(a=='1'&&b=='0'))
{
cry='0';
res+='1';
}
if(a=='1'&&b=='1')
{
cry='1';
res+='0';
}
}
else
{
if(a=='0'&&b=='0')
{
cry='0';
res+='1';
}
if((a=='0'&&b=='1')||(a=='1'&&b=='0'))
{
cry='1';
res+='0';
}
if(a=='1'&&b=='1')
{
cry='1';
res+='1';
}
}
}
if(cry
=='1')
res+=cry;
int
len=res.length();
char
restmp[]=new char[len];
restmp=res.toCharArray();
res="";
for(int
i=len-1;i>=0;i--)
res+=restmp[i];
int
i=cmn_expo+((int)cry-48);
res=res.substring(0,i+1)+'.'+res.substring(i+1);
System.out.println(res);
todec(res);
}
void
addzeros()
{
int
t1=tmp1.length(),t2=tmp2.length();
if(t1>t2)
for(int
i=0;i<(t1-t2);i++)
tmp2+='0';
if(t1<t2)
for(int
i=0;i<(t2-t1);i++)
tmp1+='0';
}
void
todec(String str)
{
int
i=str.indexOf('.');
float
ans=0;
for(int
j=0;j<str.length();j++)
if(str.charAt(j)!='.')
ans+=((int)str.charAt(j)-48)*Math.pow(2,--i);
System.out.println(ans);
}
}
class
FloatingAdder
{
public
static void main(String str[])
{
FloatingPointAdder
a=new FloatingPointAdder();
a.input();
}
}
/*OUTPUT:
enter 1st no
456
111001000.
enter 2nd no
258
100000010.
IEEE FORMAT
SIGN EXPONENT MANTISSA
01000011111001000
01000011100000010
1011001010.
714.0
*/