 			var sig1:String = (((b2 & 0xF) << 16) | (b3 << 8) | b4).toString(2);
 			var sig2:String = ((b5 >> 7) ? '1' : '0');
 			var sig3:String = (((b5 & 0x7F) << 24) | (b6 << 16) | (b7 << 8) | b8).toString(2);	// significand = bits 12..63
-			while (sig3.length < 31)
-				sig3 = '0' + sig3;
+			if (sig3.length < 31)
+				sig3 = '0000000000000000000000000000000'.substr(0, 31 - sig3.length) + sig3;
 			
 			var sig:int = parseInt(sig1 + sig2 + sig3, 2);
 			if (sig == 0 && exp == -1023)

			var sig1:String = (((b2 & 0xF) << 16) | (b3 << 8) | b4).toString(2);
			var sig2:String = ((b5 >> 7) ? '1' : '0');
			var sig3:String = (((b5 & 0x7F) << 24) | (b6 << 16) | (b7 << 8) | b8).toString(2);	// significand = bits 12..63
			while (sig3.length < 31)
				sig3 = '0' + sig3;
			
			var sig:int = parseInt(sig1 + sig2 + sig3, 2);
			if (sig == 0 && exp == -1023)

	
			this.data = (data !== undefined) ? data : [];
			if (endian !== undefined) this.endian = endian;
			this.length = this.data.length;
	
			this.stringTable = [];
			this.objectTable = [];
