309{
310 unsigned short buf=0x0000;
313 if(nMantLength<8)
314 {
315 std::cout<<"Requested mantissa reduction is too large: 23->"<<nMantLength<<std::endl;
316 return false;
317 }
318 std::vector<FloatRep>::const_iterator fIt;
319
320
321
322
323
324
325
326
331 {
332 unsigned short int ex=(*fIt).exponent();
333 unsigned int mant=(*fIt).mantissa();
335 if(i==j)
336 {
339 }
340 else
341 {
344 }
345 if((ex!=0)&&(mant!=0))
346 {
347 if((ex<bias)||(ex-bias>limit))
348 {
349
350 return false;
351 }
352 }
353 ++fIt;
354 }
355
356
358 for(std::vector<Triplet>::iterator trIt=
m_tripVec.begin();trIt!=
m_tripVec.end();++trIt)
359 {
360 int i1,i2[2];
361 i1=(*trIt).m_d;
362 i2[0]=(*trIt).m_nd1;i2[1]=(*trIt).m_nd2;
363
366
368 buf =
buf | ((
e<<12) & 0xF000);
369 if((src[i2[0]].exponent()==0)&&(src[i2[0]].mantissa()==0))
370 {
371 e=
src[i2[0]].exponent();
373 }
374 else
375 {
376 if(src[i2[0]].
sign())
379 }
381 if((src[i2[1]].exponent()==0)&&(src[i2[1]].mantissa()==0))
382 {
384 e=
src[i2[1]].exponent();
385 }
386 else
387 {
389 if(src[i2[1]].
sign())
391 }
393
396 }
397
399 unsigned int nPacked=0;
400 int nFreeBits=0,nBitsToStore=0,nBufferLength=0;
401 unsigned int srcBuffer=0x00000000;
402
403 while (nPacked<=
src.size()+1)
404 {
405 if(nFreeBits==0)
406 {
407 if(nBufferLength!=0)
408 {
410
411 }
413 nFreeBits=16;
414 nBufferLength++;
415 }
416 if(nBitsToStore==0)
417 {
418 if(nPacked!=0)
419 ++fIt;
420 if(fIt==
src.end())
break;
421 nPacked++;
422 srcBuffer=((*fIt).mantissa()<<9);
423
424 nBitsToStore=nMantLength;
425 }
426 int Np=(nBitsToStore>nFreeBits)?nFreeBits:nBitsToStore;
429 slice = (
slice >> (32-nFreeBits)) & 0x0000FFFF;
430 unsigned int tmp=(
unsigned int)(slice);
431
433 srcBuffer = srcBuffer << Np;
434
435 nFreeBits-=Np;
436 nBitsToStore-=Np;
437
438 }
439
441 return true;
442}