private ZuseBinaryFloatingPoint24Bit multiplicator(ZuseBinaryFloatingPoint24Bit A, ZuseBinaryFloatingPoint24Bit B, boolean[] s) {
		boolean[] Af = A.getExp().getCopiedBoolArr();
		boolean[] Ag = B.getExp().getCopiedBoolArr();
		boolean[] Bf = A.getMan().getCopiedBoolArr();
		boolean[] Bg = B.getMan().getCopiedBoolArr();
		
		
		boolean[] Aa = new boolean[ZuseBinaryFloatingPoint24Bit.EXPONENT];
		boolean[] Ab = new boolean[ZuseBinaryFloatingPoint24Bit.EXPONENT];
		boolean[] Ba = new boolean[ZuseBinaryFloatingPoint24Bit.MANTISSE];
		boolean[] Bb = new boolean[ZuseBinaryFloatingPoint24Bit.MANTISSE];
		
		
		boolean[] Ae = new boolean[ZuseBinaryFloatingPoint24Bit.EXPONENT];
		boolean[] Be = new boolean[ZuseBinaryFloatingPoint24Bit.MANTISSE];
		
		printRegisters(Af, Ag, Bf, Bg, Aa, Ab, Ba, Bb, Ae, Be, "Start");
		
		
		boolean lz = false;
		boolean ph = false;
		
		// determine the difference d of the exponents
		while (!ph) {
			Aa = BinaryHelper.copy(Af);			
			Ab = BinaryHelper.copy(Ag);
			
			ph = true;
			Ae = BinaryHelper.normAddBinaryBoolArray(Aa, Ab, ZuseBinaryFloatingPoint24Bit.EXPONENT);	
			Be = BinaryHelper.normAddBinaryBoolArray(Ba, Bb, ZuseBinaryFloatingPoint24Bit.MANTISSE);
			
			printRegisters(Af, Ag, Bf, Bg, Aa, Ab, Ba, Bb, Ae, Be, "Phase 0");
			reset(Aa,Ab,Ba,Bb);
		} // PH 0
		
		ph = false;
		
		for (int phase = 1; phase <= 17; phase++) {
			
			while (!ph) {
				
				Aa = BinaryHelper.copy(Ae);
				int pos = Bf.length - 1;
				boolean mm = Bf[pos];
				Bf = BinaryHelper.shiftRight(Bf,1);
				Ba = BinaryHelper.shiftRight(Be,1);
				
				if(mm)
					Bb = BinaryHelper.copy(Bg);

				ph = true;
				Ae = BinaryHelper.normAddBinaryBoolArray(Aa, Ab, ZuseBinaryFloatingPoint24Bit.EXPONENT);		
				Be = BinaryHelper.normAddBinaryBoolArray(Ba, Bb, ZuseBinaryFloatingPoint24Bit.MANTISSE);
				
				printRegisters(Af, Ag, Bf, Bg, Aa, Ab, Ba, Bb, Ae, Be, "Phase "+phase);
				
				reset(Aa,Ab,Ba,Bb);
			} // PH 1...17
			
			ph = false;
		}
		
		ph = false;
		
		while (!ph) {
			Aa = BinaryHelper.copy(Ae);
			if(Be[0] == false) {
				Ba = BinaryHelper.copy(Be);
				ph = true;
				
			} else {
				Ab = _plus1();
				Bb = BinaryHelper.shiftRight(Be,1);
				
			}

			Ae = BinaryHelper.normAddBinaryBoolArray(Aa, Ab, ZuseBinaryFloatingPoint24Bit.EXPONENT);	
			Be = BinaryHelper.normAddBinaryBoolArray(Ba, Bb, ZuseBinaryFloatingPoint24Bit.MANTISSE);
			
			printRegisters(Af, Ag, Bf, Bg, Aa, Ab, Ba, Bb, Ae, Be, "Phase 18");
			reset(Aa,Ab,Ba,Bb);
		} // PH 18
		
		ph = false;
		
		while (!ph) {
			Aa = BinaryHelper.copy(Ae);
			if(Be[0] == true) {
				Ab = _plus1();
				Bb = BinaryHelper.shiftRight(Be,1);
			} else {
				Ba = BinaryHelper.copy(Be);
			}
			
			
			ph = true;
			Ae = BinaryHelper.normAddBinaryBoolArray(Aa, Ab, ZuseBinaryFloatingPoint24Bit.EXPONENT);	
			Be = BinaryHelper.normAddBinaryBoolArray(Ba, Bb, ZuseBinaryFloatingPoint24Bit.MANTISSE);
			
			printRegisters(Af, Ag, Bf, Bg, Aa, Ab, Ba, Bb, Ae, Be, "Phase 19");
			reset(Aa,Ab,Ba,Bb);
		} // PH 19
		
		if(lz) {
			return new ZuseBinaryFloatingPoint24Bit(new Exponent(Ae), new Mantissa(Be));
		}
		
		ph = false;

		
		return new ZuseBinaryFloatingPoint24Bit(new Exponent(Ae), new Mantissa(Be));
	}