Java-Kurs, Numerische Mathematik 1.Teil, WiSe 99/00, Bodo Werner


Anhang zum Beispiel 3

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