class DezimalUmwandeln{//Applikationsklasse
//Methode mit Wert Gleitpunktzahl:
static Gleitpunktzahl Dezimal(double x,byte N,int t){
//Umwandlung einer positiven Dezimalzahl x>N in eine
//Gleitpunktzahl mit Basis N, Mantissenlaenge t
byte[] m=new byte[t];//durch Nullen vorbesetzt!!
double x1=x;
int e=0;
do{//solange wird durch N dividiert bis x1<N
e++;
x1/=N;}//Ende do-Block
while(x1>N);// Jetzt: e=Exponent von x
x/=Math.pow(N,e);
byte d=(byte) Math.floor(x); //erste Ziffer m[0]
x-=d;
int j=0;
do{//nur positive Ziffern von m werden neu besetzt
m[j]=d;//stets >0!
int i=0;
do{//solange wird mit N multipliziert bis x>N
i++;
x*=N;}//Ende innerer do-Block
while(x<1);
d=(byte) Math.floor(x);
x-=d;
j+=i;}//Ende aeusserer do-Block
while(j<t);//jetzt steht die Mantisse m fest
Gleitpunktzahl y=new Gleitpunktzahl(m,N,t,e);
return y;
}//Ende Dezimal()
static void main(String[] args){
byte N=2; int t=24; double z=2.1;
Gleitpunktzahl x=Dezimal(z,N,t);
String s="1.";
for(int i=1;i<t;i++) s+=x.m[i];
System.out.println(s+" 2^"+x.e);
//1.00001100110011001100110 2^1
}//Ende main
}//Ende class