154 double C0[5][5]{},
C[5][5]{};
164 C[j][i]=C0[i][j]=C0[j][i]=
C[i][j];
179 for(j=0;j<=i;j++) S[i][j]=L[i][j];
181 std::vector<FloatRep> vecFR;
189 char sign=(S[i][j]<0)?1:0;
190 std::uint32_t mant=
m_decoder.getMantissa();
191 unsigned short int ex=
m_decoder.getExponent();
195 std::vector<unsigned short> vShorts;
202 std::uint32_t buffer = 0x00000000u;
204 for(std::vector<unsigned short>::iterator it = vShorts.begin(); it != vShorts.end();++it) {
207 dest.push_back(buffer);
213 buffer = buffer << 16;
217 buffer = buffer | (*it);
221 dest.push_back(buffer);
232 std::vector<FloatRep> vecFR;
235 std::vector<unsigned short> vShorts;
239 for (
unsigned int ii : src) {
240 unsigned short s1,s2;
242 s1 = (
unsigned short)((0xFFFF0000 & ii) >> 16);
243 s2 = (
unsigned short)(0x0000FFFF & ii);
244 vShorts.push_back(s1);
246 vShorts.push_back(s2);
249 if(!
restoreFR(vShorts,vecFR))
return false;
251 std::vector<FloatRep>::iterator fIt(vecFR.begin());
256 if(fIt==vecFR.end())
break;
257 S[i][j]=(*fIt).restore();
263 for(j=0;j<=i;j++) L[i][j]=S[i][j];
269 C[i][j]+=L[i][k]*L[j][k];
278 for(i=0;i<5;i++)
for(j=0;j<=i;j++) dest.push_back(
C[i][j]);
285 unsigned short buf=0x0000;
290 std::cout<<
"Requested mantissa reduction is too large: 23->"<<nMantLength<<std::endl;
293 std::vector<FloatRep>::const_iterator fIt;
301 unsigned short int ex=(*fIt).exponent();
302 std::uint32_t mant=(*fIt).mantissa();
314 if((ex!=0)&&(mant!=0))
316 if((ex<bias)||(ex-bias>limit))
326 for(std::vector<Triplet>::iterator trIt=
m_tripVec.begin();trIt!=
m_tripVec.end();++trIt)
330 i2[0]=(*trIt).m_nd1;i2[1]=(*trIt).m_nd2;
336 buf = buf | ((e<<12) & 0xF000);
337 if((src[i2[0]].exponent()==0)&&(src[i2[0]].mantissa()==0))
339 e=src[i2[0]].exponent();
344 if(src[i2[0]].
sign())
346 e=src[i2[0]].exponent()-
m_biases[5];
348 buf = buf | ((e<<6) & 0x07C0);
349 if((src[i2[1]].exponent()==0)&&(src[i2[1]].mantissa()==0))
352 e=src[i2[1]].exponent();
356 e=src[i2[1]].exponent()-
m_biases[5];
357 if(src[i2[1]].
sign())
360 buf = buf | (e & 0x001F);
367 unsigned int nPacked=0;
368 int nFreeBits=0,nBitsToStore=0,nBufferLength=0;
369 std::uint32_t srcBuffer=0x00000000u;
371 while (nPacked<=src.size()+1)
388 if(fIt==src.end())
break;
390 srcBuffer=((*fIt).mantissa()<<9);
392 nBitsToStore=nMantLength;
394 int Np=(nBitsToStore>nFreeBits)?nFreeBits:nBitsToStore;
396 std::uint32_t slice = srcBuffer & mask;
397 slice = (slice >> (32-nFreeBits)) & 0x0000FFFF;
398 std::uint32_t tmp = slice;
401 srcBuffer = srcBuffer << Np;
412 int i,nRestored,nFreeBits,nBitsToStore;
413 unsigned short buf=0x0000;
414 std::uint32_t destBuffer=0x00000000;
415 std::vector<unsigned short>::const_iterator uIt(src.begin());
424 for(;uIt!=src.end();++uIt)
430 char s=((buf & 0x0800)==0)?0:1;
432 s=((buf & 0x0020)==0)?0:1;
434 unsigned short e = ((buf & 0xF000) >> 12);
436 e = ((buf & 0x07C0) >> 6);
443 if(i<5)
return false;
457 dest[nRestored-1].mantissa(destBuffer);
460 destBuffer=0x00000000;
461 nFreeBits=nMantLength;
465 if(uIt==src.end())
break;
472 nBitsToStore=16;buf=(*uIt);
474 int Np=(nFreeBits>nBitsToStore) ? nBitsToStore : nFreeBits;
475 std::uint32_t tmp = buf;
476 tmp = tmp >> (16-Np);
478 destBuffer = destBuffer | tmp;